八:SQL之DQL数据查询语言单表操作

前言:

  DQL数据库查询语言是我们在开发中最常使用的SQL,这一章总结了单表操作部分的常用查询方式

  主要操作有:查询所有字段、查询指定字段、查询指定记录、带IN的关键字查询,范围查询,陪查询、查询空值

  带AND的多条件查询、带OR的多条件查询,关键字DISTINCT,查询结果排序,分组查询。分页查询等

准备好数据测试表 

 1 mysql> select * from student;
 2 +------+----------+-------+----------+-------------+
 3 | s_id | s_name   | s_age | s_gender | s_major     |
 4 +------+----------+-------+----------+-------------+
 5 |    1 | 马化腾   |    54 | 男       | CEO         |
 6 |    2 | 雷军     |    48 | 男       | CEO         |
 7 |    3 | 丁磊     |    46 | 男       | CEO         |
 8 |    4 | 马云     |    51 | 男       | CEO         |
 9 |    5 | 刘强东   |    45 | 男       | CEO         |
10 |    6 | 王健林   |    65 | 男       | CEO         |
11 |    7 | 周鸿祎   |    46 | 男       | CEO         |
12 |    8 | 章泽天   |    25 | 女       | NULL        |
13 |    9 | 章子怡   |    39 | 女       | NULL        |
14 |   10 | 张一山   |    27 | 男       | 演员        |
15 |   11 | 冯小刚   |    66 | 男       | 导演        |
16 |   12 | 张艺谋   |    68 | 男       | 导演        |
17 |   13 | 刘亦菲   |    32 | 女       | 演员        |
18 |   14 | 莫言     |    70 | 男       | 作家        |
19 |   15 | 科比     |    35 | 男       | 运动员      |
20 |   16 | 梅西     |    31 | 男       | 运动员      |
21 |   17 | 约翰塞纳 |    42 | 男       | 运动员      |
22 |   18 | 凤姐     |    36 | 女       | NULL        |
23 |   19 | 詹姆斯   |    31 | 男       | 运动员      |
24 |   20 | 内马尔   |    25 | 男       | 运动员      |
25 |   21 | 胡歌     |    35 | 男       | 演员        |
26 |   22 | 许家印   |    67 | 男       | CEO         |
27 |   23 | 周杰伦   |    35 | 男       | 歌手        |
28 |   24 | 鹿晗     |    27 | 男       | 偶像明星    |
29 |   25 | P-Gone   |    20 | 男       | 歌手        |
30 |   26 | 李安     |    55 | 男       | 导演        |
31 |   27 | 斯图尔特 |    28 | 女       | 演员        |
32 |   29 | 犀利哥   |    45 | 男       | 乞丐        |
33 |   31 | 冯提莫   |    26 | 女       | 主播        |
34 |   32 | 卢本伟   |    25 | 男       | 主播        |
35 |   33 | 小狗     |    21 | 男       | LOL职业选手 |
36 |   34 | Gogoing  |    26 | 男       | LOL职业选手 |
37 |   35 | 仙凡     |    27 | 男       | 主播        |
38 |   36 | 黑人毅   |    29 | 男       | 主播        |
39 |   37 | 旭旭宝宝 |    28 | 男       | 主播        |
40 |   38 | 大龙猫   |    27 | 男       | 主播        |
41 |   39 | 奥巴马   |    57 | 男       | 前美国总统  |
42 |   40 | 克林顿   |    20 | 男       | 前美国总统  |
43 |   42 | 林俊杰   |    37 | 男       | 歌手        |
44 |   43 | 张韶涵   |    35 | 女       | 歌手        |
45 |   44 | 杨紫     |    27 | 女       | 演员        |
46 |   45 | 马东     |    49 | 男       | 主持人      |
47 +------+----------+-------+----------+-------------+
48 42 rows in set (0.00 sec)

练习的数据库表

一:查询所有

  1.1:查询所有记录

      select * from student;

  1.2:查询指定字段

      select s_id,s_name,s_major from student;

  1.3:查询指定记录(带条件)

      select * from student where s_age > 50;

二:关键字IN

  2.1:in(xx,yy,mm,..)满足条件的都会被查出来

  

三:带BETWEEN AND 关键字

  3.1:between xx and yy指定了范围[xx yy]前后都包括在内

  

四:带LIKE的模糊查询

  4.1:字段  LIKE  ‘值‘--表示全匹配,LIKE相当于= 

  

  4.2:字段 LIKE ‘%值‘;匹配最后一个

  4.3:字段 LIKE ‘值%‘;匹配第一个

  4.4:字段 LIKE ‘%值%‘;全匹配

  

  4.5:字段 LIKE ‘_值‘;  _表示一个字符占位符

  4.6:字段 LIKE ‘值_‘;

  4.7:字段 LIKE ‘_值‘_; 

 1 mysql> select * from student where s_name like ‘__马‘;
 2 +------+--------+-------+----------+------------+
 3 | s_id | s_name | s_age | s_gender | s_major    |
 4 +------+--------+-------+----------+------------+
 5 |   39 | 奥巴马 |    57 | 男       | 前美国总统 |
 6 +------+--------+-------+----------+------------+
 7 1 row in set (0.00 sec)
 8
 9 mysql> select * from student where s_name like ‘马_‘;
10 +------+--------+-------+----------+---------+
11 | s_id | s_name | s_age | s_gender | s_major |
12 +------+--------+-------+----------+---------+
13 |    4 | 马云   |    51 | 男       | CEO     |
14 |   45 | 马东   |    49 | 男       | 主持人  |
15 +------+--------+-------+----------+---------+
16 2 rows in set (0.00 sec)
17
18 mysql> select * from student where s_name like ‘马__‘;
19 +------+--------+-------+----------+---------+
20 | s_id | s_name | s_age | s_gender | s_major |
21 +------+--------+-------+----------+---------+
22 |    1 | 马化腾 |    54 | 男       | CEO     |
23 +------+--------+-------+----------+---------+
24 1 row in set (0.00 sec)
25
26 mysql> select * from student where s_name like ‘_马_‘;
27 +------+--------+-------+----------+---------+
28 | s_id | s_name | s_age | s_gender | s_major |
29 +------+--------+-------+----------+---------+
30 |   20 | 内马尔 |    25 | 男       | 运动员  |
31 +------+--------+-------+----------+---------+
32 1 row in set (0.00 sec)

五:空值查询

  5.1:空值是指null并不是“"一般表示数据未知,或者在以后添加数据时,其字段默认为null  

 1 mysql> select * from student where isnull(s_major);
 2 +------+--------+-------+----------+---------+
 3 | s_id | s_name | s_age | s_gender | s_major |
 4 +------+--------+-------+----------+---------+
 5 |    8 | 章泽天 |    25 | 女       | NULL    |
 6 |    9 | 章子怡 |    39 | 女       | NULL    |
 7 |   18 | 凤姐   |    36 | 女       | NULL    |
 8 +------+--------+-------+----------+---------+
 9 3 rows in set (0.00 sec)
10
11 mysql> select * from student where s_major is null;
12 +------+--------+-------+----------+---------+
13 | s_id | s_name | s_age | s_gender | s_major |
14 +------+--------+-------+----------+---------+
15 |    8 | 章泽天 |    25 | 女       | NULL    |
16 |    9 | 章子怡 |    39 | 女       | NULL    |
17 |   18 | 凤姐   |    36 | 女       | NULL    |
18 +------+--------+-------+----------+---------+
19 3 rows in set (0.00 sec)

  5.2:非空值查询 IS NOT NULL;    

   select * from student where s_major is not null;

六:带 AND 或 OR 的多条件查询

 1 mysql> select * from student where s_age >= 60 and s_age < 70;
 2 +------+--------+-------+----------+---------+
 3 | s_id | s_name | s_age | s_gender | s_major |
 4 +------+--------+-------+----------+---------+
 5 |    6 | 王健林 |    65 | 男       | CEO     |
 6 |   11 | 冯小刚 |    66 | 男       | 导演    |
 7 |   12 | 张艺谋 |    68 | 男       | 导演    |
 8 |   22 | 许家印 |    67 | 男       | CEO     |
 9 +------+--------+-------+----------+---------+
10 4 rows in set (0.00 sec)
11
12 mysql> select * from student where s_age >= 60 or s_age <=20;
13 +------+--------+-------+----------+------------+
14 | s_id | s_name | s_age | s_gender | s_major    |
15 +------+--------+-------+----------+------------+
16 |    6 | 王健林 |    65 | 男       | CEO        |
17 |   11 | 冯小刚 |    66 | 男       | 导演       |
18 |   12 | 张艺谋 |    68 | 男       | 导演       |
19 |   14 | 莫言   |    70 | 男       | 作家       |
20 |   22 | 许家印 |    67 | 男       | CEO        |
21 |   25 | P-Gone |    20 | 男       | 歌手       |
22 |   40 | 克林顿 |    20 | 男       | 前美国总统 |
23 +------+--------+-------+----------+------------+
24 7 rows in set (0.00 sec)

七:关键字DISTINCT,去重复查询

  去重复查询只是将给定列中的重复的记录去掉  

  

八:分组查询 GOUP BY

  8.1:分组查询就是把值相等的列分到一个组里面

  8.2:带条件的分组查询where having的情况

    where:在分组前对表数据进行过滤,因此位置在group by前面

    having:在分组后对结果进行过滤,因此位置在group by后面

  8.3:分组查询可使用count()查询出每一组具体有多少条记录

  8.4:使用group_ concat(列名)还可以将该组中该列所有值查询出来

  8.5:还可以将分组查询的结果使用 order by排序

参照以下代码

 1 mysql> select count(s_name) as 该组总数,s_major from student group by s_major;
 2 +----------+-------------+
 3 | 该组总数 | s_major     |
 4 +----------+-------------+
 5 |        3 | NULL        |
 6 |        8 | CEO         |
 7 |        2 | LOL职业选手 |
 8 |        1 | 主持人      |
 9 |        6 | 主播        |
10 |        1 | 乞丐        |
11 |        1 | 作家        |
12 |        1 | 偶像明星    |
13 |        2 | 前美国总统  |
14 |        3 | 导演        |
15 |        4 | 歌手        |
16 |        5 | 演员        |
17 |        5 | 运动员      |
18 +----------+-------------+
19 13 rows in set (0.00 sec)
20
21 mysql> select count(s_name) as 该组总数,s_major from student group by s_major having count(s_name) >= 4;
22 +----------+---------+
23 | 该组总数 | s_major |
24 +----------+---------+
25 |        8 | CEO     |
26 |        6 | 主播    |
27 |        4 | 歌手    |
28 |        5 | 演员    |
29 |        5 | 运动员  |
30 +----------+---------+
31 5 rows in set (0.00 sec)
32
33 mysql> select count(s_name) as 该组总数,s_major from student where s_age > 30 group by s_major having count(s_name) >= 4;
34 +----------+---------+
35 | 该组总数 | s_major |
36 +----------+---------+
37 |        8 | CEO     |
38 |        4 | 运动员  |
39 +----------+---------+
40 2 rows in set (0.00 sec)
41
42 mysql> select count(s_name) as 该组总数,s_major from student where s_age > 30 group by s_major having count(s_name) >= 4 order by s_major;
43 +----------+---------+
44 | 该组总数 | s_major |
45 +----------+---------+
46 |        8 | CEO     |
47 |        4 | 运动员  |
48 +----------+---------+
49 2 rows in set (0.00 sec)
50
51 mysql> select count(s_name) as 该组总数,s_major from student where s_age > 30 group by s_major having count(s_name) >= 4 order by s_major desc;
52 +----------+---------+
53 | 该组总数 | s_major |
54 +----------+---------+
55 |        4 | 运动员  |
56 |        8 | CEO     |
57 +----------+---------+
58 2 rows in set (0.00 sec)
59
60 mysql> select count(s_name) as 该组总数,s_major,group_concat(s_name) as 该组所有人姓名 from student group by s_major;
61 +----------+-------------+---------------------------------------------------+
62 | 该组总数 | s_major     | 该组所有人姓名                                    |
63 +----------+-------------+---------------------------------------------------+
64 |        3 | NULL        | 章泽天,凤姐,章子怡                                |
65 |        8 | CEO         | 马化腾,周鸿祎,王健林,刘强东,马云,丁磊,雷军,许家印 |
66 |        2 | LOL职业选手 | Gogoing,小狗                                      |
67 |        1 | 主持人      | 马东                                              |
68 |        6 | 主播        | 冯提莫,卢本伟,仙凡,黑人毅,旭旭宝宝,大龙猫         |
69 |        1 | 乞丐        | 犀利哥                                            |
70 |        1 | 作家        | 莫言                                              |
71 |        1 | 偶像明星    | 鹿晗                                              |
72 |        2 | 前美国总统  | 克林顿,奥巴马                                     |
73 |        3 | 导演        | 李安,张艺谋,冯小刚                                |
74 |        4 | 歌手        | P-Gone,周杰伦,林俊杰,张韶涵                       |
75 |        5 | 演员        | 刘亦菲,胡歌,张一山,杨紫,斯图尔特                  |
76 |        5 | 运动员      | 梅西,詹姆斯,内马尔,约翰塞纳,科比                  |
77 +----------+-------------+---------------------------------------------------+
78 13 rows in set (0.00 sec)

GROUP BY练习代码

九:LIMIT实现分页查询

  9.1:LIMIT 位置便宜量,行数;

    位置便宜量:默认值为0,即从第一条记录开始

    行数:指定从给定位置开始需要查询的总记录数

    LIMIT x,y 不能写成 LIMIT(x,y)

 1 mysql> select * from student limit 6;
 2 +------+--------+-------+----------+---------+
 3 | s_id | s_name | s_age | s_gender | s_major |
 4 +------+--------+-------+----------+---------+
 5 |    1 | 马化腾 |    54 | 男       | CEO     |
 6 |    2 | 雷军   |    48 | 男       | CEO     |
 7 |    3 | 丁磊   |    46 | 男       | CEO     |
 8 |    4 | 马云   |    51 | 男       | CEO     |
 9 |    5 | 刘强东 |    45 | 男       | CEO     |
10 |    6 | 王健林 |    65 | 男       | CEO     |
11 +------+--------+-------+----------+---------+
12 6 rows in set (0.00 sec)
13
14 mysql> select * from student limit 2,3;
15 +------+--------+-------+----------+---------+
16 | s_id | s_name | s_age | s_gender | s_major |
17 +------+--------+-------+----------+---------+
18 |    3 | 丁磊   |    46 | 男       | CEO     |
19 |    4 | 马云   |    51 | 男       | CEO     |
20 |    5 | 刘强东 |    45 | 男       | CEO     |
21 +------+--------+-------+----------+---------+
22 3 rows in set (0.00 sec)

十:组函数(集合函数)查询

  count(*)--------------计算表中的总行数

  count(字段名)------计算指定列的总行数,会忽略NULL的值

  sum(字段名)------计算该列的总和

  avg(字段名);--------计算该列的平均值

  max(字段名)--------计算该列的最大值

  min(字段名)---------计算该列的最小值

参考以下代码:

mysql> select count(*) from student;
+----------+
| count(*) |
+----------+
|       42 |
+----------+
1 row in set (0.00 sec)

mysql> select count(s_major) from studen
+----------------+
| count(s_major) |
+----------------+
|             39 |
+----------------+
1 row in set (0.00 sec)

mysql> select sum(s_age) from student;
+------------+
| sum(s_age) |
+------------+
|       1628 |
+------------+
1 row in set (0.00 sec)

mysql> select avg(s_age) from student;
+------------+
| avg(s_age) |
+------------+
|    38.7619 |
+------------+
1 row in set (0.00 sec)

mysql> select max(s_age) from student;
+------------+
| max(s_age) |
+------------+
|         70 |
+------------+
1 row in set (0.00 sec)

mysql> select min(s_age) from student;
+------------+
| min(s_age) |
+------------+
|         20 |
+------------+
1 row in set (0.00 sec)

原文地址:https://www.cnblogs.com/wdmlsx/p/9267707.html

时间: 2024-08-28 12:05:16

八:SQL之DQL数据查询语言单表操作的相关文章

九:SQL之DQL数据查询语言多表操作

前言: 一:数据准备 员工表emp 和部门表 dept --分别创建部门和员工表,并实现一对多关系 DROP TABLE dept; CREATE TABLE `dept`( `d_id` INT(5) PRIMARY KEY AUTO_INCREMENT COMMENT '这是部门id主键自增长', `d_name` VARCHAR(30) NOT NULL UNIQUE COMMENT '这是部门名称唯一非空' ); CREATE TABLE `emp`( `e_id` INT PRIMAR

数据存储——SQLite数据库存储——SQL语句——DQL数据查询语言

一.where  查询条件 1.操作符 (1)is null/is not null  判断控/非空 (2)like  模糊比较字符串 ①通配符 1)%  任意数量字符 2)_   单个字符 ②用法 1)like  ‘%条件%’ 2)like  ‘%条件’ 3)like  '条件%' 4)like  '_条件_' 5)like  '_条件' 6)like  '条件_' (3)in  判断是否在值得列表内 ①和对单个字段  or  运算等效 ②用法 1)字段名 in (值1,值2,...) 2)字

SQL入门-DQL数据查询语言--select

1.help select mysql> help select Name: 'SELECT' Description: Syntax: SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] selec

【知了堂学习笔记】SQL查询基础语句(单表查询、多表查询)

SQL查询基础 1.单表查询 从数据库中查找数据 专业的称谓又称为投影 基本查询语句结构 select 列 from 表 * 所有列不是所有其他东西 查询所有数据 例:SELECT * FROM t_studen 需要执行比较细的操作  加上条件筛选:查询id为2号的学生信息 SELECT * FROM t_student WHERE id=2; 筛选的执行步骤 例:SELECT * FROM t_student WHERE id=2; SELECT *          (3) 再查询  筛选

Django框架05 /orm单表操作

目录 Django框架05 /orm单表操作 昨日内容回顾 今日内容 orm单表操作 对象关系映射(object relational mapping) 1.orm介绍 2.增: 3.时间问题 4.删 5.改 6.批量插入 -- bulk_create 7.查询api 8.基于双下划线的模糊查询 -- filter双下划线查询 9.总结 总结1 总结2 Django框架05 /orm单表操作 昨日内容回顾 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承

Django基础五之django模型层(一)单表操作

目录 一 ORM简介 二 单表操作 一.创建表 创建模型 2 更多字段和参数 3 settings配置 4.自定义字段(了解) 二.添加表纪录 方式1 方式2(用的多) 方式3:批量插入 三.查询表纪录 查询API(都是重点) 基于双下划线的模糊查询 四.删除表纪录 五.修改表纪录 三 章节作业 1 图书管理系统 2 查询操作练习 四 xxx 本节目录 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,

09-hibernate单表操作(1)

1,单一主键 2,基本类型 3,对象类型 4,组件属性 5,单表操作 单一主键 常用生成策略: assigned 有程序员生成(手工) native 由数据库底层,如果是mysql是increment,如果是Oracle是sequence. 测试assigned :代码手动给他赋值,不给ID赋值 import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.

Django开发:(3.1)ORM:单表操作

MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动 ORM是"对象-关系-映射"的简称. Mysql中的表对应python中的类,表的字段对应类的属性,表的记录对应类的实例化的对象 单表操作 创建表 1. 创建模型 创建名为app01的app,在app01下的models.py中创建模型: from dj

17-2 orm单表操作和多表操作

参考:https://www.cnblogs.com/liwenzhou/p/8660826.html 一  ORM单表操作 1 增删改查 1 1. 查询 2 1. 查所有 3 models.Publisher.objects.all() 4 2. 查某个具体的记录 5 models.Publisher.objects.get(id=1) --> 注意查询条件不成立就报错 6 2. 删除一条记录 7 models.Publisher.objects.get(id=1).delete() 8 3.