mysql 之 数据查询语言DQL(selectl)

DQL(data query language) 数据查询语言

数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>

sql的书写规范

1、sql语句以分号结尾
2、sql不区分大小写
3、单词和单词之间用空格隔开
4、无论是空格还是分号还是引号都必须是英文状态下
5、如果值是字符串必须要用引号引起来,如果是数字就不要用引号引起来

1》查询表中的所有字段

有两种方法:使用*通配符查询所有字段
语法:select * from 表名;
另一种方式:指明要查那一列
语法:select 列名1,列名2,列名3 from 表名;

总结:
1、使用 * 查询时,只能按照数据表中的字段的排序顺序排列,不能改变字段的排列顺序
2、列出所有的列名这种查询方式比较灵活,但是如果表中的字段太多时,没有 * 方便
3、 列名与列名之间用逗号隔开,最后一个列后面不用加逗号

2》去重

语法:select distinct 列名 from 表名;

总结:
1、如果distinct关键字后面有多个字段,则会对多个字段组合去重,也就是说,多个字段组合起来完全一样的情况才会被去掉
2、distinct必须放在列名前面
3、distinct只能用在select语句中

3》设置别名

as关键字为表和列设置别名
目的:字段或者表名太长为了方便操作,为了查询结果更加直观
语法:表名 as 别名 /列名 as 别名

总结:

1、as关键字可以省略,省略后需要将字段名称和别名用空格隔开
2、表的别名在执行查询时使用,并不在查询结果中显示。列的别名会返回在查询结果中
3、别和表的别名要注意不要和现有数据库中的表名或者列名重复

4》限制查询结果的条数

limit用于指定查询结果从那条数据开始显示,一共显示多少条数据
语法:select * from 表名 limit 初始位置,显示数据条数;
初始位置:表示从哪条数据开始显示,第一条数据的位置是0,第二条数据的位置是1……
显示数据条数:表示显示结果的条数
也可以不指定初始位置:limit 显示数据的条数,默认从第一行开始显示

例如:查询学生表第四行到第七行的数据
SELECT * FROM student LIMIT 3,4;

总结:

1、limit后面的数字必须是正整数
2、初始位置可以省略,如果省略,查询就是从第一行开始显示,limit n等价于limit 0,n
3、显示数据的条数大于查询结果的总数,查询结果有几行显示几行

5》对查询结果进行排序

将查询出来的数据进行排序(先查询数据,后排序)

语法:select * from 表名 order by 列名 排序方式;

升序:asc 由小到大
降序:desc 由大到小

例如:查询学生信息,并且按照学生的年龄升序排列
SELECT * FROM student ORDER BY sage;

总结:

1、同时有order by和limit时,将order by放在前面,limit放在后面
2、order by后面也可以跟多列,例如order by后跟两列,先按照第一列排序,如果第一列值一样,才会按照第二列排序

6》单条件查询

单条件是指在where关键字后面只有一个查询条件
语法:select * from 表名 where 列名 比较运算符 值;
比较运算符:> < = >= <= != <>(不等于)

例如:查询男学生的信息
SELECT * FROM student WHERE ssex = ‘男’;

7》多条件查询

多条件是指在where关键字后面跟多个查询条件
条件与条件之间要用逻辑运算符连接:and or

and表示所有的条件同时满足
or表示条件满足一个就可以

语法:select * from 表名 where 列名 比较运算符 值 逻辑运算符 列名 比较运算符 值;

例如:查询男学生并且系编号是d01的学生信息
SELECT * FROM student WHERE ssex=‘男’ AND did=‘d01’;

8》模糊查询

语法:select * from 表名 where 列名 [not] like 字符串;

not:可选参数,表示取反
字符串:字符串是指用来匹配的字符串,可以是一个完整的字符串,也可以包含通配符
通配符:通配符是一种特殊的语句,主要用于模糊查询,当不知道真正的字符时,可以使用通配符代替一个多多个真正的字符
%:代表任意长度的字符串
例如:a%b 表示以a开头,以b结尾,中间是什么符号任意,可以匹配出ab、accb、a1b、a汉字b
_:代表单个字符
例如:a_b 表示以a开头,以b结尾,中间是1个任意字符,可以匹配出a1b、a汉b、abb

例如:在淘宝上搜索iphone12的商品,结果将商品名称带iphone12全部查询出来
select * from 商品表 where 商品名称 like ‘ %iphone12%’;

查询学生表中姓名带狗的学生信息
SELECT * FROM student WHERE sname LIKE ‘%狗%’;

注意:

mysql默认是不区分大小写的,like T% 会将以T开头和以t开头的所有数据都查询出来
%可以匹配任意字符,但是不能匹配null

9》空值查询

mysql中null是一个特殊符号,代表空值,空值不是0,也不是空字符串,表示的是未知的值,不确定的值
is null关键字,来判断该字段是否为空值
语法:select * from 表名 where 列名 is [not] NULL;
not:可选参数,表示取反

例如:查询电话是null的学生信息
SELECT * FROM student WHERE sphone is NULL;

注意:

is null是一个整体,不能将is null换成=null

同理:is not null也是一个整体,不能将is not null换成!=null

10》范围查询

between and
关键字,用来判断字段的值是否在某一个指定的范围之内,如果在指定范围之内,就会被返回到结果中,否则不会被返回到结果中

语法:select * from 表名 where 列名 [NOT] between 起始值 and 终止值;

例如:查询年龄是20到30岁的学生信息

SELECT * FROM student WHERE sage BETWEEN 20 AND 30;
等价于:
SELECT * FROM student WHERE sage >= 20 AND sage <=30;

注意:

between and查询出来的结果包括边界值

11》in查询

语法:select * from 表名 where 列名 in(值1,值2,值3);

功能:将符合括号当中值的数据全部查询出来

例如:查询姓名是二狗子或狗蛋子的学生信息
SELECT * FROM student WHERE sname IN(‘二狗子’,‘狗蛋子’);
等价于
SELECT * FROM student WHERE sname = ‘二狗子’ OR sname= ‘狗蛋子’;

注意:

=后面跟单个值
in后面跟多个值
in等价于多个or连接

上一篇:SQL语言


下一篇:ROS2 使用