1.1、什么是DQL
DQL:数据查询语言,用于从数据库表中查询数据,并不会修改数据,只是一种显示数据的方式。由select语句构成。
1.2、记录查询格式
格式:select */字段列表 from 数据库表名 [where 条件表达式];
格式说明:
select */字段列表: 查询完后需要展示的字段
from 数据库表名: 指定要查询的数据库表
[where 条件表达式]: 查询满足条件的记录
二、记录查询
2.1、简单查询
查询表中的记录和列
格式:select * from 数据库表名; #查询表中所有记录,显示所有列或select 字段名1,字段名2,...,字段名n from 数据库表名; #查询表中所有记录,显示指定列
案例:
查询student表中的所有记录,显示所有列
#显示所有记录mysql> select * from student;+------+-----------+------------+------+| id | sname | birthday | sex |+------+-----------+------------+------+| 1 | 郭德纲 | 1973-01-18 | 男 || 2 | 林志颖 | 1974-10-18 | 男 || 3 | 柳岩 | 1980-11-08 | 女 |+------+-----------+------------+------+3 行于数据集 (0.01 秒)
查询student表中的所有记录,显示所有姓名、性别列
#显示所有记录,显示列为姓名、性别mysql> select sname,sex from student;+-----------+------+| sname | sex |+-----------+------+| 郭德纲 | 男 || 林志颖 | 男 || 柳岩 | 女 |+-----------+------+3 行于数据集 (0.01 秒)
2.2、别名查询
别名有二种:字段别名、表别名
作用:
字段别名查询出记录显示新的名字,并不影响表的结构。
表别名取了一个新的名字,可以代替表名使用。
字段别名
格式:select 字段名1 as 别名1,字段名2 as 别名2,...,字段名n as 别名n from 数据库表名;
案例:
查询student表中的sname和sex,以别名’姓名’和’性别’显示
#使用字段别名显示姓名、性别mysql> select sname as 姓名,sex as 性别 from student;+-----------+------+| 姓名 | 性别 |+-----------+------+| 郭德纲 | 男 || 林志颖 | 男 || 柳岩 | 女 |+-----------+------+3 行于数据集 (0.01 秒)
表别名
格式:select 字段名1 as 别名1,字段名2 as 别名2,...,字段名n as 别名n from 数据库表名 as 别名;
案例:
查询student表中的sname和sex,以别名’姓名’和’性别’显示,并为student表取了一个别名 s
#使用字段别名显示姓名、性别,表别名没有具体表现mysql> select sname as 姓名,sex as 性别 from student as s;+-----------+------+| 姓名 | 性别 |+-----------+------+| 郭德纲 | 男 || 林志颖 | 男 || 柳岩 | 女 |+-----------+------+3 行于数据集 (0.01 秒)
注意:
表别名一般用于多表查询,单表查询中没有具体体现。
2.3、清除重复记录查询
格式:select distinct 字段名 from 数据库表名;
案例:
去掉性别重复的记录
去掉性别和姓名同时重复的记录
#查看所有记录mysql> select * from student;+------+-----------+------------+------+| id | sname | birthday | sex |+------+-----------+------------+------+| 1 | 郭德纲 | 1973-01-18 | 男 || 2 | 林志颖 | 1974-10-18 | 男 || 3 | 柳岩 | 1980-11-08 | 女 |+------+-----------+------------+------+3 行于数据集 (0.01 秒)#查看sex不重复的记录mysql> select distinct sex from student;+------+| sex |+------+| 男 || 女 |+------+2 行于数据集 (0.01 秒)#查看sex,sname都不重复的记录mysql> select distinct sex,sname from student;+------+-----------+| sex | sname |+------+-----------+| 男 | 郭德纲 || 男 | 林志颖 || 女 | 柳岩 |+------+-----------+3 行于数据集 (0.01 秒)
2.4、运算查询
字段与固定值运算
格式:select 字段名+固定值 from 数据库表名;
注意:
运算的字段必须是数值型
案例:
查询student表中年龄减10岁,并显示sname和age
mysql> select age-10 as age ,sname from student;+-----+--------+| age | sname |+-----+--------+| 37 | 郭德纲 || 36 | 林志颖 || 30 | 柳岩 |+-----+--------+3 rows in set
字段与字段运算
格式:select 字段名+字段名 from 数据库表名;
注意:
运算的字段必须是数值型
案例:
查询student表中age与id的和,并显示出来age和id
mysql> select age+id,age,id from student;+--------+-----+----+| age+id | age | id |+--------+-----+----+| 48 | 47 | 1 || 48 | 46 | 2 || 43 | 40 | 3 |+--------+-----+----+3 rows in set
三、条件查询
3.1、条件查询前准备
新建学生信息表(students)
字段:学生ID(sid)、学生姓名(sname)、学生性别(sex)、学生年龄(age)、英语成绩(english)、数学成绩(math)、入学时间(entertime)、备注(remark)
create table students( sid int, sname varchar(20), sex varchar(2), age int, english double(4,1), math double(4,1), entertime date, remark text);
记录:
insert into students values(1,'张三','男',19,98.5,88,'2017-09-01','他来自四川'),(2,'李四','男',20,80,88,'2017-09-01','他来自重庆'),(3,'张红','女',19,86,80,'2017-09-01','他来自北京'),(4,'张八','男',18,80,85,'2017-09-01','他来自天津'),(5,'李三','男',19,60,88,'2017-09-01','他来自湖北'),(6,'王六','女',20,50,70,'2017-09-01','他来自湖南'),(7,'刘红','女',18,90,98,'2017-09-01','他来自甘肃');