MySQL表查询

知识点

一、语法格式

SELECT

字段

FROM

表名列表        //基本查询

WHERE

条件           //条件查询

二、运算符

比较运算符

功能

>

大于

>=

大于等于

<

小于

<=

小于等于

=

等于

<>!=

不等于

between…and

在某范围之内(含最小值、最大值)

in(…)

in之后的列表中的值,多选一

like 占位符

模糊匹配(_匹配单个字符,%匹配任意个字符)

is null

null

逻辑运算符

功能

and &&

并且(多个条件同时成立)

or ||

或者(多个条件任意一个成立)

not !

非,不是

三、模糊查询

语法:SELECT 字段 FROM 表名列表 WHERE 条件 LIKE 值;

注意:由于值是模糊的,因此需要用到通配符:%和_。

①%:%用来匹配0个或多个字符,可以匹配任意类型和长度的字符,对长度没有限制。

②_:_用来匹配任意单个字符,常用来限制表达式的字符长度。

四、排序查询

语法:SELECT 字段 FROM 表名列表 WHERE 条件 ORDER BY FIELD1 DESC/ASC, FILED2 DESC/ASC, …;

注意:DESC表示降序排列,ASC表示升序排列,如果排序方式省略不写,则表示使用默认值升序ASC。

五、限制查询

语法:SELECT 字段 LIMIT 起始偏移量, 行数;

注意:默认情况下,起始偏移量为0,这时只需要写返回的行数即可。由于MYSQL查询结果集顺序的不确定性,通常限制查询要配合排序查询使用。

六、聚合

语法:SELECT 字段 OP_NAME FROM 表名 WHERE 条件 GROUP BY FIELD, FIELD2, …WITH ROLLUP HAVING 条件;

注意:OP_NAME表示要进行的聚合操作,也就是聚合函数,常用聚合函数包括SUM(求和)、COUNT(*)(记录数)、MAX(最大值)、MIN(最小值)、AVG(平均值);GROUP BY表示要进行分类聚合的字段,WITH ROLLUP表示是否对分类聚合后的结果进行再汇总,这个关键字是可选的;HAVING表示对分类后的结果进行条件过滤。所有的NULL值不参与聚合函数的计算。

聚合函数:将一列数据作为一个整体,进行纵向计算。直接作用于字段。SELECT 聚合函数(字段列表) FROM 表名;

练习

要求:创建数据表并完成下列练习。在实际操作后,填写正确的sql语句,

create table emp
(
    id          int comment '编号',
    workno      varchar(10) comment '工号',
    name        varchar(10) comment '姓名',
    gender      char(1) comment '性别',
    age         tinyint unsigned comment '年龄',
    idcard      char(18) comment '身份证号',
    workaddress varchar(50) comment '工作地址',
    entrydate   date comment '入职时间'
) comment '员工表';
 
insert into emp(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (1, '1', 'Liu', 'W', 20, '123456789012345678', 'BJ', '2000-01-01'),
       (2, '2', 'Zhang', 'M', 18, '123456789012345670', 'BJ', '2005-09-01'),
       (3, '3', 'Wei', 'W', 38, '123456789012345670', 'SH', '2005-08-01'),
       (4, '4', 'Zhao', 'W', 18, '123456789012345670', 'BJ', '2009-12-01'),
       (5, '5', 'Xiao', 'W', 16, '123456789012345678', 'SH', '2007-07-01'),
       (6, '6', 'Yang', 'M', 28, '12345678901234567X', 'BJ', '2006-01-01'),
       (7, '7', 'Fan', 'M', 40, '123456789012345670', 'BJ', '2005-05-01'),
       (8, '8', 'Dai', 'W', 38, '123456789012345670', 'TJ', '2015-05-01'),
       (9, '9', 'Fan', 'W', 45, '123456789012345678', 'BJ', '2010-04-01'),
       (10, '10', 'Chen', 'M', 53, '123456789012345670', 'SH', '2011-01-01'),
       (11, '11', 'Zhang', 'M', 55, '123456789012345670', 'JS', '2015-05-01'),
       (12, '12', 'Chang', 'M', 32, '123456789012345670', 'BJ', '2004-02-01'),
       (13, '13', 'Zhang', 'M', 88, '123456789012345678', 'JS', '2020-11-01'),
       (14, '14', 'Mie', 'W', 65, '123456789012345670', 'XA', '2019-05-01'),
       (15, '15', 'Hu', 'M', 70, '12345678901234567X', 'XA', '2018-04-01'),
       (16, '16', 'Zhou', 'W', 18, null, 'BJ', '2012-06-01');

1.查询年龄等于88的员工。

SELECT * FROM emp WHERE age = 88;

2.查询年龄小于20的员工信息。

SELECT * FROM emp WHERE age < 20;

3.查询年龄小于等于20的员工信息。

SELECT * FROM emp WHERE age <= 20;

4.查询没有身份证号的员工信息。

SELECT * FROM emp WHERE idcard IS NULL;

6.查询年龄不等于88的员工信息。(请用两种方式表示)

-- 方式一

SELECT * FROM emp WHERE age != 88;

-- 方式二

SELECT * FROM emp WHERE age <> 88;

7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息。(请用三种方式表示)

-- 方式一

SELECT * FROM emp WHERE age BETWEEN 15 AND 20;

-- 方式二

SELECT * FROM emp WHERE age >= 15 AND age <= 20;

-- 方式三

SELECT * FROM emp WHERE age >= 15 AND age <= 20 ORDER BY age;

8.查询性别为女且年龄小于25岁的员工信息。

SELECT * FROM emp WHERE gender = 'W' AND age < 25;

9.查询年龄等于18或20或40的员工信息。(请用两种方式表示)

-- 方式一

SELECT * FROM emp WHERE age IN (18, 20, 40);

-- 方式二

SELECT * FROM emp WHERE age = 18 OR age = 20 OR age = 40;

10.查询姓名为两个字的员工

SQL 语句 SELECT * FROM emp WHERE CHAR_LENGTH(name) = 2; 的目的是从 emp 表中选择所有字段(即所有列)的数据,但仅限于那些 name 字段(即姓名字段)的字符长度等于2的记录。

···

SELECT * FROM emp WHERE CHAR_LENGTH(name) = 2;

····

11.查询身份证号码最后一位是X的员工信息。(请用两种方式表示)

```

-- 方式一

SELECT * FROM emp WHERE idcard LIKE '%X';

-- 方式二

SELECT * FROM emp WHERE RIGHT(idcard, 1) = 'X';

```

12.统计该企业员工数量。(聚合函数)

```

SELECT COUNT(*) FROM emp;

```

13.统计该企业员工的平均年龄。(聚合函数)

```

SELECT AVG(age) FROM emp;

````

14.统计该企业员工的最大年龄。(聚合函数)

```

SELECT MAX(age) FROM emp;

```

15.统计西安地区的年龄之和。(聚合函数)

```

SELECT SUM(age) FROM emp WHERE workaddress = 'XA';

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值