当前位置: 首页 > news >正文

SQL快速入门【转自牛客网】

来源:牛客网

1、SQL 基础查询

在 SQL 中,SELECT 语句是最基本的查询语句,用于从数据库表中检索数据。通过 SELECT 语句,可以选择表中的所有列或特定列,并根据需要进行过滤和排序。

基本语法

SELECT 语句的基本语法如下:

SELECT column1, column2, ...
FROM table_name;

其中:

  • column1, column2, ...:指定要查询的列名,可以是表中的具体列名或表达式。
  • table_name:指定要查询的表名。
查询所有列

使用 * 通配符查询表中的所有列:

SELECT * FROM table_name;

此语句会返回 table_name 表中的所有列和所有行。

查询特定列

明确指定列名查询表中的特定列:

SELECT first_name, last_name, salary
FROM table_name;

此语句会返回 table_name 表中的 first_namelast_namesalary 列的所有行。

使用别名

为列或表指定别名,使查询结果更易读:

SELECT first_name AS name, last_name AS surname, salary
FROM table_name AS tn;

此语句会将 first_namelast_name 列分别重命名为 namesurname,同时将表 table_name 重命名为 tn

示例

假设 employees 表的数据如下:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
3CharlieBrown50000102
查询所有列
SELECT * FROM employees;

结果:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
3CharlieBrown50000102
查询特定列
SELECT first_name, last_name, salary FROM employees;

结果:

first_namelast_namesalary
AliceSmith60000
BobJohnson70000
CharlieBrown50000
使用别名
SELECT first_name AS fname, last_name AS lname FROM employees;

结果:

fnamelname
AliceSmith
BobJohnson
CharlieBrown

2、简单处理查询结果

前面章节中的SELECT语句都是返回所有匹配的行。但是如果想对结果进行简单处理,可以通过以下方法实现:

查询结果的过滤

使用WHERE子句可以根据条件过滤查询结果。

语法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

condition:限制条件。

查询结果的排序

使用ORDER BY子句可以根据指定的列对查询结果进行排序。

语法:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

column1 [ASC|DESC]:按照column1[升序|降序]进行排序,若不加ASCDESC则默认升序。

查询结果的去重

使用DISTINCT关键字可以去除查询结果中的重复行。

语法:

SELECT DISTINCT column1, column2, ...
FROM table_name;

column1, column2, ...列中的重复行进行去除。

查询结果的限制

在某些数据库系统中,可以使用LIMIT子句限制查询结果的行数。

语法:

SELECT column1, column2, ...
FROM table_name
LIMIT n;

限制输出n行。

示例

假设employees表的数据如下:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
3CharlieBrown50000102
4DavidDavis80000102
5EveWhite90000103
查询结果的过滤

查询employees表中工资大于60000的员工。

SELECT * 
FROM employees
WHERE salary > 60000;

结果:

employee_idfirst_namelast_namesalarydepartment_id
2BobJohnson70000101
4DavidDavis80000102
5EveWhite90000103
查询结果的排序

查询employees表中的所有员工,并按工资降序排序。

SELECT * 
FROM employees
ORDER BY salary DESC;

结果:

employee_idfirst_namelast_namesalarydepartment_id
5EveWhite90000103
4DavidDavis80000102
2BobJohnson70000101
1AliceSmith60000101
3CharlieBrown50000102
查询结果的去重

查询employees表中所有(不重复)的部门ID。

SELECT DISTINCT department_id 
FROM employees;

结果:

department_id
101
102
103
查询结果的限制

查询employees表中工资最高的3名员工。

SELECT * 
FROM employees
ORDER BY salary DESC
LIMIT 3;

结果:

employee_idfirst_namelast_namesalarydepartment_id
5EveWhite90000103
4DavidDavis80000102
2BobJohnson70000101

以下是整理后的Markdown格式内容:

3、SQL 基础排序 - ORDER BY 子句

在 SQL 中,ORDER BY 子句用于对查询结果进行排序。通过 ORDER BY 子句,可以根据一个或多个列对结果集进行升序或降序排列。这在处理大量数据时非常有用,可以帮助更清晰地查看和分析数据。

ORDER BY 子句的使用

ORDER BY 子句的基本语法如下:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC];
  • column1:指定要排序的列名。
  • ASC:表示按升序排序(默认值)。
  • DESC:表示按降序排序。
多列排序

ORDER BY 子句也可以根据多个列进行排序。语法如下:

ORDER BY column1 ASC, column2 DESC;
示例

假设有一个 employees 表,包含以下数据:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
3CharlieBrown50000102
4DavidDavis80000102
5EveWhite90000103
单列排序

查询所有员工,并按工资升序排序:

SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary ASC;

结果:

employee_idfirst_namelast_namesalary
3CharlieBrown50000
1AliceSmith60000
2BobJohnson70000
4DavidDavis80000
5EveWhite90000

查询所有员工,并按工资降序排序:

SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary DESC;

结果:

employee_idfirst_namelast_namesalary
5EveWhite90000
4DavidDavis80000
2BobJohnson70000
1AliceSmith60000
3CharlieBrown50000
多列排序

查询所有员工,并先按部门 ID 升序排序,再按工资降序排序:

SELECT employee_id, first_name, last_name, salary, department_id
FROM employees
ORDER BY department_id ASC, salary DESC;

结果:

employee_idfirst_namelast_namesalarydepartment_id
2BobJohnson70000101
1AliceSmith60000101
4DavidDavis80000102
3CharlieBrown50000102
5EveWhite90000103
使用别名排序

也可以在 ORDER BY 子句中使用列的别名进行排序。例如:

SELECT employee_id, first_name, last_name, salary AS emp_salary
FROM employees
ORDER BY emp_salary DESC;

结果:

employee_idfirst_namelast_nameemp_salary
5EveWhite90000
4DavidDavis80000
2BobJohnson70000
1AliceSmith60000
3CharlieBrown50000

4、SQL 基础操作符

在 SQL 中,操作符用于在 WHERE 子句中指定条件,以过滤查询结果。以下是一些常用的基础操作符及其用法。

1. 比较运算符

比较运算符用于比较两个值返回布尔值(TRUE 或 FALSE)。常用的比较运算符包括:

  • =:等于
  • <>!=:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于
2. 逻辑运算符

逻辑运算符用于组合多个条件,返回布尔值。常用的逻辑运算符包括:

  • AND:逻辑与
  • OR:逻辑或
  • NOT:逻辑非
3. IN 操作符

IN 操作符用于指定多个可能的值,返回布尔值。语法如下:

SELECT column1, column2 
FROM table_name 
WHERE column1 IN (value1, value2, ...);
4. BETWEEN 操作符

BETWEEN 操作符用于指定一个范围,返回布尔值。语法如下:

SELECT column1, column2 
FROM table_name 
WHERE column1 BETWEEN value1 AND value2;
5. LIKE 操作符

LIKE 操作符用于模式匹配,返回布尔值。语法如下:

SELECT column1, column2 
FROM table_name 
WHERE column1 LIKE pattern;
  • %:匹配任意数量的字符(包括零个字符)。
  • _:匹配单个字符。

假设有一个 employees 表,包含以下数据:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
3CharlieBrown50000102
4DavidDavis80000102
5EveWhite90000103
示例 1:比较运算符

查询工资大于 60000 的员工:

SELECT * 
FROM employees
WHERE salary > 60000;

结果:

employee_idfirst_namelast_namesalarydepartment_id
2BobJohnson70000101
4DavidDavis80000102
5EveWhite90000103

示例 2:逻辑运算符

查询工资大于 60000 且部门 ID 为 102 的员工:

SELECT * 
FROM employees
WHERE salary > 60000 AND department_id = 102;

结果:

employee_idfirst_namelast_namesalarydepartment_id
4DavidDavis80000102

示例 3:IN 操作符

查询部门 ID 为 101 或 103 的员工:

SELECT * 
FROM employees
WHERE department_id IN (101, 103);

结果:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
5EveWhite90000103

示例 4:BETWEEN 操作符

查询工资在 50000 到 70000 之间的员工:

SELECT * 
FROM employees
WHERE salary BETWEEN 50000 AND 70000;

结果:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
3CharlieBrown50000102

示例 5:LIKE 操作符

查询名字以字母 “A” 开头的员工:

SELECT * 
FROM employees
WHERE first_name LIKE 'A%';

结果:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101

4、SQL 高级操作符

在 SQL 中,高级操作符可以帮助你更灵活和高效地操作数据库中的数据。以下是一些常见的高级操作符及其用法。

1. IS NULLIS NOT NULL

IS NULL 和 IS NOT NULL 用于检查一个列是否为 NULL 或不为 NULL。

  • IS NULL:检查列是否为 NULL。
  • IS NOT NULL:检查列是否不为 NULL。
2. EXISTS 操作符

EXISTS 操作符用于检查子查询是否返回任何行。如果子查询返回至少一行,则 EXISTS 条件为 TRUE。

语法:

SELECT column1, column2 
FROM table_name
WHERE EXISTS (SELECT 1 FROM another_table WHERE condition);
3. ALLANY 操作符

ALL 和 ANY 操作符用于比较一个值与子查询返回的值集

  • ALL:与子查询返回的所有值进行比较。
  • ANY:与子查询返回的任意一个值进行比较。

语法:

SELECT column1, column2 
FROM table_name
WHERE column1 > ALL (SELECT column1 FROM another_table WHERE condition);

假设有一个 employees 表,包含以下数据:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
3CharlieBrownNULL102
4DavidDavis80000102
5EveWhite90000103
示例1:IS NULL 和 IS NOT NULL

查询工资为 NULL 的员工:

SELECT * 
FROM employees
WHERE salary IS NULL;

结果:

employee_idfirst_namelast_namesalarydepartment_id
3CharlieBrownNULL102

查询工资不为 NULL 的员工:

SELECT * 
FROM employees
WHERE salary IS NOT NULL;

结果:

employee_idfirst_namelast_namesalarydepartment_id
1AliceSmith60000101
2BobJohnson70000101
4DavidDavis80000102
5EveWhite90000103
示例2:EXISTS 操作符

现在,我们想查询所有工资不低于表中任何其他员工工资的员工。这里可以使用 EXISTS 操作符来实现。

SELECT e1.employee_id, e1.first_name, e1.last_name, e1.salary
FROM employees e1
WHERE EXISTS (SELECT 1FROM employees e2WHERE e2.salary IS NOT NULL AND e1.salary >= e2.salary
);

子查询:

  • 子查询也从 employees 表中选择数据,但使用别名 e2。
  • 子查询的条件是 e2.salary IS NOT NULL,确保不比较 NULL 值。
  • 子查询的条件是 e1.salary >= e2.salary,确保外层查询的员工工资高于子查询中的任何员工工资。

EXISTS 操作符:

  • 如果子查询返回至少一行,则 EXISTS 条件为 TRUE。
  • 这意味着外层查询的员工工资不低于表中任何其他员工的工资。

结果:

employee_idfirst_namelast_namesalary
5EveWhite90000

员工 Eve 的工资是 90000,这是表

相关文章:

  • MCP协议学习
  • Transformer核心技术深度解析:多头注意力机制与架构精粹
  • 20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框
  • 【Linux】网络--网络层--IP协议
  • 抖音商城抓包 分析
  • 基于Python学习《Head First设计模式》第三章 装饰者模式
  • Android基于LiquidFun引擎实现软体碰撞效果
  • leetcode hot100刷题日记——35.子集
  • day17 leetcode-hot100-34(链表13)
  • 每日算法刷题计划Day20 6.2:leetcode二分答案3道题,用时1h20min
  • 从 LeetCode 到日志匹配:一行 Swift 实现规则识别
  • 力扣LeetBook数组和字符串--数组简介
  • 【软件测试】web自动化:Pycharm+Selenium+Firefox(一)
  • NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)
  • 电脑wifi显示已禁用怎么点都无法启用
  • Java线程生命周期详解
  • GStreamer开发笔记(六):gstreamer基本概念:组件、箱柜、管道、衬垫、链接组件
  • 【存储基础】存储设备和服务器的关系和区别
  • 4、ubuntu系统 | 文本和目录操作函数
  • 设备驱动与文件系统:03 生磁盘的使用
  • 方庄网站建设/惠州seo网站管理
  • 宁波网站推广优化公司电话/淘宝seo搜索引擎优化
  • 章丘建设网站/推广seo公司
  • 哪些大型门户网站是用phpwind 搭建的/广州疫情升级
  • 做网站加入广告联盟/百度搜索官方网站
  • 海口网站建设q.479185700惠/十大短视频平台排行榜