MySQL基础语法

165 阅读10分钟

MySQL基础语法

查询

全表查询

select * from 表名

示例

让我们假设有一张名为 student 的数据表,它存储了学生的信息,包括学号、姓名、年龄等。

现在,我们来使用 select 全表查询语句,查看整个学生表的内容。

数据表 student

学号姓名年龄
101小明20
102小红22
103小刚21
104小丽19

SQL 查询语句:

select * from student;

查询结果:

学号姓名年龄
101小明20
102小红22
103小刚21
104小丽19

选择查询

select 列名,列名... from 表名

示例

假设有一张名为 students 的学生数据表,它存储了班级里学生的信息,包括姓名(name)、年龄(age)、性别(gender)、分数(score)等。

数据表 students

nameagegenderscore
John18Male90
Alice17Female88
Bob19Male78
Kate18Female95

现在,我们使用"选择查询"来获取所有学生的姓名(name)和性别(gender)信息,SQL 语句如下:

select name, gender from students;

查询结果:

namegender
JohnMale
AliceFemale
BobMale
KateFemale

别名

select 列名 as 别名,列名 as 别名... from 表名

示例

假设有一张名为 employees 的数据表,它存储了团队成员的信息,包括姓名(name)、年龄(age)、职位(position)等:

数据表 employees

nameageposition
John30Project Manager
Alice28Software Engineer
Bob32Product Designer
Kate26Marketing Specialist

现在,我们使用 "别名" 来获取所有团队成员的姓名(name)和职位(position)信息,并为它们取别名为 员工姓名职位名称

-- SQL查询语句
select name as 员工姓名, position as 职位名称 from employees;

上述代码中的 as 也可以省略,比如 name 员工姓名 也是 ok 的。

查询结果,注意表格头的列名从英文变为了中文:

员工姓名职位名称
JohnProject Manager
AliceSoftware Engineer
BobProduct Designer
KateMarketing Specialist

常量和运算

示例

假设有一张名为 orders 的数据表,它存储了订单信息,包括订单编号(order_id)、商品单价(unit_price)、购买数量(quantity)等:

数据表orders

order_idunit_pricequantity
100110.005
100220.003
100315.002
100425.004

现在,我们需要计算每个订单的总金额(total_amount),即商品单价(unit_price)乘以购买数量(quantity)。

SQL 查询语句如下:

select order_id, unit_price, quantity, unit_price * quantity as total_amount from orders;

查询结果如下,其中 total_amount 是计算出来的新列:

order_idunit_pricequantitytotal_amount
100110.00550.00
100220.00360.00
100315.00230.00
100425.004100.00

此外,SQL 可以直接把常量作为列名,比如执行下列 SQL 语句:

select 200, '篮球' as hobby;

查询结果如下:

200hobby
200篮球

条件查询

SELECT 列1, 列2, ...
FROM 表名
WHERE 条件;

其中,列1, 列2, ...是你要选择的列,可以是具体的列名,也可以是*表示选择所有列。表名是你要从中查询数据的表名。条件是指定的查询条件,可以使用比较运算符(如=<>等)、逻辑运算符(如ANDOR等)、IN 操作符、LIKE 操作符等来设置条件。

示例

假设有一张名为products的数据表,它存储了产品信息,包括产品名称(name)、单价(price)、库存(stock)等:

数据表products

namepricestock
A10.0050
B20.0030
C15.0020
D25.0010

现在,我们使用 "WHERE" 来筛选出库存小于等于 20 的产品:

-- SQL查询语句
select name, price, stock from products where stock <= 20;

查询结果:

namepricestock
C15.0020
D25.0010

条件查询-运算符

比如 =!=<>

示例

假设有一张名为 employees 的数据表,它存储了员工信息,包括员工姓名(name)、年龄(age)、工资(salary)等:

数据表 employees

nameagesalary
小明255000
小红306000
小李285500
小张224500

现在,我们使用不同的运算符来进行条件查询:

1)使用 "!=" 运算符筛选出 name 不是 '小张' 的员工:

-- SQL查询语句
select name, age, salary from employees where name != '小张';

查询结果:

nameagesalary
小明255000
小红306000
小李285500

2)使用 ">" 运算符筛选出工资高于 5500 的员工:

-- SQL查询语句
select name, age, salary from employees where salary > 5500;

查询结果:

nameagesalary
小红306000

3)使用 "BETWEEN" 运算符筛选出年龄在 25 到 30 之间的员工:

-- SQL查询语句
select name, age, salary from employees where age between 25 and 30;

查询结果:

nameagesalary
小明255000
小红306000
小李285500

条件查询-空值

在数据库中,有时候数据表的某些字段可能没有值,即为空值(NULL)。

空值表示该字段的值是未知的、不存在的或者没有被填写的。在SQL查询中,我们可以使用 "IS NULL" 和 "IS NOT NULL" 来判断字段是否为空值或非空值。

示例

假设有一张名为 employees 的数据表,它存储了员工信息,包括员工姓名(name)、年龄(age)、入职日期(hire_date)等:

数据表 employees

nameagehire_date
小明252020-01-01
小红302020-02-15
小李28NULL
小张NULL2020-03-20

现在,我们使用 "IS NULL" 来查询出入职日期未填写的员工:

-- SQL查询语句
select name, age from employees where hire_date is null;

查询结果:

nameage
小李28

条件查询-模糊查询

模糊查询是一种特殊的条件查询,它允许我们根据模式匹配来查找符合特定条件的数据,可以使用 LIKE 关键字实现模糊查询。

在 LIKE 模糊查询中,我们使用通配符来代表零个或多个字符,从而能够快速地找到匹配的数据。

有如下 2 种通配符:

  • 百分号(%):表示任意长度的任意字符序列。
  • 下划线(_):表示任意单个字符。

示例

假设有一张名为employees的数据表,它存储了员工信息,包括员工姓名(name)、年龄(age)、职位(position)等:

数据表employees

nameageposition
张三25软件工程师
李四30数据分析师
王五28产品经理
小明22软件测试工程师

现在,我们使用 LIKE 模糊查询来找出姓名(name)中包含关键字 "张" 的员工信息:

-- SQL查询语句
select name, age, position from employees where name like '%张%';

查询结果:

nameageposition
张三25软件工程师

还可以使用模糊查询匹配开头和结尾:

-- 只查询以 "张" 开头的数据行
select name, age, position from employees where name like '张%';

-- 只查询以 "张" 结尾的数据行
select name, age, position from employees where name like '%张';

同理,可以使用 not like 来查询不包含某关键字的信息。

条件查询-逻辑运算

在逻辑运算中,常用的运算符有:

  • AND:表示逻辑与,要求同时满足多个条件,才返回 true。
  • OR:表示逻辑或,要求满足其中任意一个条件,就返回 true。
  • NOT:表示逻辑非,用于否定一个条件(本来是 true,用了 not 后转为 false)

示例

假设有一张名为employees的数据表,它存储了员工信息,包括员工姓名(name)、年龄(age)、工资(salary)等:

数据表employees

nameagesalary
张三2510000
李四3012000
李五2815000
小明228000

现在,我们使用逻辑运算来找出姓名中包含关键字 "李" 年龄小于 30 岁的员工信息:

-- SQL查询语句
select name, age, salary from employees where name like '%李%' and age < 30;

查询结果:

nameagesalary
李五2815000

去重

在 SQL 中,我们可以使用 DISTINCT 关键字来实现去重操作。

select distinct 字段1, 字段2, 字段3, ... from 表名

示例

假设有一张名为students的数据表,它存储了学生信息,包括学生姓名(name)、班级ID(class_id)、考试编号(exam_num)、成绩(score)等:

数据表students

nameclass_idexam_numscore
张三1190
李四2285
王五1192
李四2388

现在,我们使用DISTINCT关键字来找出不同的班级 ID:

-- SQL 查询语句
select distinct class_id from students;

查询结果:

class_id
1
2

除了按照单字段去重外,DISTINCT 关键字还支持根据多个字段的组合来进行去重操作,确保多个字段的组合是唯一的。

排序

在 SQL 中,我们可以使用 ORDER BY 关键字来实现排序操作。ORDER BY 后面跟上需要排序的字段,可以选择升序(ASC)或降序(DESC)排列。

select 字段1,字段2 from 表名 order by 字段1 [升序/降序], 字段2 [升序/降序], ...

示例

假设有一张名为 students 的数据表,它存储了学生信息,包括学生姓名(name)、年龄(age)和成绩(score)等:

数据表 students

nameagescore
张三1890
李四2085
王五1992
赵六2088

现在,我们使用ORDER BY关键字来对学生表进行排序:

-- SQL 查询语句 1
select name, age from students order by age asc;

-- SQL 查询语句 2
select name, score from students order by score desc;

查询语句 1 结果,按照年龄升序(从小到大):

nameage
张三18
王五19
李四20
赵六20

查询语句 2 结果,按照分数降序(从大到小):

namescore
王五92
张三90
赵六88
李四85

截断和偏移

在 SQL 中,我们使用 LIMIT 关键字来实现数据的截断和偏移。

截断和偏移的一个典型的应用场景是分页,即网站内容很多时,用户可以根据页号每次只看部分数据。

示例

假设有一张名为 tasks 的数据表,它存储了待办事项信息,包括任务名称(task_name)和截止日期(due_date)等。

数据表tasks

task_namedue_date
完成报告2023-08-05
预约医生2023-08-08
购买礼物2023-08-10
安排旅行2023-08-15

现在,我们使用LIMIT关键字来进行分页查询:

-- LIMIT 后只跟一个整数,表示要截断的数据条数(一次获取几条)
select task_name, due_date from tasks limit 2;

-- LIMIT 后跟 2 个整数,依次表示从第几条数据开始、一次获取几条
select task_name, due_date from tasks limit 2, 2;

查询语句 1 结果,只获取了 2 条数据:

task_namedue_date
完成报告2023-08-05
预约医生2023-08-08

查询语句 2 结果,从下标为 2(第 3 条)数据的位置开始获取 2 条数据:

task_namedue_date
购买礼物2023-08-10
安排旅行2023-08-15

条件分支

条件分支 case when 是 SQL 中用于根据条件进行分支处理的语法。它类似于其他编程语言中的 if else 条件判断语句,允许我们根据不同的条件选择不同的结果返回。

case when 支持同时指定多个分支,示例语法如下:

selec 字段1 , CASE WHEN (条件1) THEN 结果1
	   WHEN (条件2) THEN 结果2
	   ...
	   ELSE 其他结果 END  from 表名

示例

假设有一个学生表 student,包含以下字段:name(姓名)、age(年龄)。数据如下:

nameage
小明18
鸡哥25
李华30
王五40

使用条件分支 case when ,根据 name 来判断学生是否会说 RAP,并起别名为 can_rap。

示例 SQL 如下:

SELECT
  name,
  CASE WHEN (name = '鸡哥') THEN '会' ELSE '不会' END AS can_rap
FROM
  student;

查询结果:

namecan_rap
小明不会
鸡哥
李华不会
王五不会