DQL语句

DQL(Data QueryLanguage )数据查询语言,基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块。

一、DQL概述

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','他来自甘肃');

3.2、基础比较运算符

格式:
>、<、<=、>=、=、<>

注意:

在SQL中“<>”,表示不等于,mysql中也可以用“!=”表示

在SQL中没有“==”

案例:

查询学生信息表中英语成绩大于80的学生信息

mysql> select * from students where english>80;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
3 行于数据集 (0.02 秒)

查询学生信息表中英语成绩小于80的学生信息

mysql> select * from students where english<80;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
+------+--------+------+------+---------+------+------------+-----------------+
2 行于数据集 (0.01 秒)

查询学生信息表中年龄大于等于19岁的学生信息

mysql> select * from students where age>=19;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
+------+--------+------+------+---------+------+------------+-----------------+
5 行于数据集 (0.01 秒)

查询学生信息表中年龄小于等于19岁的学生信息

mysql> select * from students where age<=19;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 4 | 张八 | 男 | 18 | 80.0 | 85.0 | 2017-09-01 | 他来自天津 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
5 行于数据集 (0.01 秒)

查询学生信息表中数学成绩等于88的学生信息

mysql> select * from students where math=88;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
+------+--------+------+------+---------+------+------------+-----------------+
3 行于数据集 (0.02 秒)

查询学生信息表中年龄不等于18岁的学生信息

mysql> select * from students where age<>18;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
+------+--------+------+------+---------+------+------------+-----------------+
5 行于数据集 (0.02 秒)

查询学生信息表中年龄大于等于20岁的学生的姓名和性别

mysql> select sname,sex from students where age>=20;
+--------+------+
| sname | sex |
+--------+------+
| 李四 | 男 |
| 王六 | 女 |
+--------+------+
2 行于数据集 (0.01 秒)

3.3、提高比较运算符

格式:
between...and... #在一定的范围内

注意:

包含头尾

案例:

查询学生信息表中英语成绩80到90岁之间的学生信息

mysql> select * from students where english between 80 and 90;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 4 | 张八 | 男 | 18 | 80.0 | 85.0 | 2017-09-01 | 他来自天津 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
4 行于数据集 (0.01 秒)
格式:
in(值1,值2...,值n) #表示用n个值相等
not in(值1,值2...,值n) #表示用n个值不相等

案例:

查询学生信息表中sid为1,3,5的信息

mysql> select * from students where sid in(1,3,5);
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
+------+--------+------+------+---------+------+------------+-----------------+
3 行于数据集 (0.01 秒)

查询学生信息表中sid除了1,3,5的信息

mysql> select * from students where sid not in(1,3,5);
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 4 | 张八 | 男 | 18 | 80.0 | 85.0 | 2017-09-01 | 他来自天津 |
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
4 行于数据集 (0.01 秒)
格式:
like '%值%' #模糊查询

注意:


mysql通配符 % :匹配任意多个字符 _ :匹配一个字符

案例:

查询学生信息表中姓’张’的学生信息

mysql> select * from students where sname like '张%';
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 4 | 张八 | 男 | 18 | 80.0 | 85.0 | 2017-09-01 | 他来自天津 |
+------+--------+------+------+---------+------+------------+-----------------+
3 行于数据集 (0.01 秒) mysql> select * from students where sname like '张';
空的数据集 (0.01 秒)

查询学生信息表中包含’红’字的学生信息

mysql> select * from students where sname like '%红%';
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
2 行于数据集 (0.01 秒)

查询学生信息表中姓’王’的二个字的学生信息

mysql> select * from students where sname like '王_';
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
+------+--------+------+------+---------+------+------------+-----------------+
1 行于数据集 (0.01 秒)
格式:
is null #表示某字段值为null
is not null #表示某字段值不为null

注意:

不能写成:字段名=null

案例:

查询学生信息表中age为null学生信息

查询学生信息表中english为null学生信息

mysql> select * from students where age is null;
+------+--------+------+------+---------+------+-----------+--------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+-----------+--------+
| 8 | 王五 | 男 | NULL | NULL | NULL | NULL | NULL |
+------+--------+------+------+---------+------+-----------+--------+
1 行于数据集 (0.01 秒) mysql> select * from students where english is null;
+------+-----------+------+------+---------+------+-----------+--------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+-----------+------+------+---------+------+-----------+--------+
| 8 | 王五 | 男 | NULL | NULL | NULL | NULL | NULL |
| 9 | 李老六 | 男 | 19 | NULL | NULL | NULL | NULL |
+------+-----------+------+------+---------+------+-----------+--------+
2 行于数据集 (0.01 秒)

查询学生信息表中english不为null学生信息

mysql> select * from students where english is not null;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 4 | 张八 | 男 | 18 | 80.0 | 85.0 | 2017-09-01 | 他来自天津 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
7 行于数据集 (0.02 秒)

3.4、逻辑运算符

格式:
and #与,二边条件同时成立,成立 &&
or #或,二边条件有一边成立,成立 ||
not #非,一边条件成立,取反;一边条件不成立,取反 !

案例:

查询学生信息表中english大于85的男生的学生信息

mysql> select * from students where english>85 and sex='男';
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
+------+--------+------+------+---------+------+------------+-----------------+
1 行于数据集 (0.01 秒)

查询学生信息表中年龄大于等于20岁或数学成绩大于85的学生信息

mysql> select * from students where age>=20 or math>85;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
5 行于数据集 (0.01 秒)

查询学生信息表中除了年龄大于等于20岁或数学成绩大于85的学生信息

mysql> select * from students where not (age>=20 or math>85);
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 4 | 张八 | 男 | 18 | 80.0 | 85.0 | 2017-09-01 | 他来自天津 |
+------+--------+------+------+---------+------+------------+-----------------+
2 行于数据集 (0.01 秒)

DQL语句的更多相关文章

  1. Statement执行DQL语句(查询操作)

    import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import org.junit.T ...

  2. Mysql 数据库操作之DDL、DML、DQL语句操作

    Mysql 数据库操作之DDL.DML.DQL语句操作 设置数据库用户名密码 l  Show databases 查看数据库列表信息 l  查看数据库中的数据表信息 ,格式: use 数据库名: sh ...

  3. 6.2笔记-DQL语句查询数据库

    一.DQL语句 1.常量列 SELECT `StudentName` AS 姓名, `Address` AS 地址, '北京信息中心' AS 学校名称 FROM `student`; 2.常用函数 聚 ...

  4. DML和DQL语句

    DML操作: a.插入单行数据:      INSERT INTO 表名(列名,列名,...) VALUE(列值,列值,...); 表的字段名是可选的,如果省略,则一次插入所有字段 多个列表和多个值之 ...

  5. 使用Statement执行DML和DQL语句

    import com.loaderman.util.JdbcUtil; import java.sql.Connection; import java.sql.DriverManager; impor ...

  6. JDBC基础篇(MYSQL)——使用statement执行DQL语句(select)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day02_statement; import java.sql.Connection; import java.s ...

  7. DQL语句总结

    6.DQL语句总结 select ... from ... where ... group by ... having ... order by ... limit .... 执行顺序? 1,from ...

  8. DQL语句排序与分组

    DQL语句排序与分组 一.DQL-排序 排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列.分内部排序和外部排序,若整个 ...

  9. Symfony3 查询搜索功能DQL语句like查询

    //前台页面代码 <form method="GET" action="{{ path('staff_index') }}" name="sea ...

随机推荐

  1. Linux 07 用户组文件

    参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 概述 用户组的所 ...

  2. DOM及DOM相关操作

    DOM 概述: DOM 全称(document object model)文档对象模型(文档指定为对应html文档),对应的DOM就是操作HTML文档的(增删改查) DOM结构 document 文档 ...

  3. java学习第一天.day01

    Java的编译和运行机制 java文件编译成字节码文件后加载到java缓存中jvm Java的基本语法 1.Java语言严格区分大小写 2.一个Java源文件里可以定义多个Java类,但不能存在多个p ...

  4. linux 旁路掉协议栈的处理点

    对于协议栈的发展,目前有三种处理趋势,一种是类似于使用dpdk的方式,然后将协议栈放到用户态来做,做得比较好的一般都是以bsd的协议栈为底子,可以参考的是腾讯开源的的方案,另外一种是,继续放在内核,但 ...

  5. 国家都给NISP证书的补贴了!关于NISP考试的政策有哪些?

    NISP证书由中国信息安全测评中心依据中编办赋予"信息安全服务和信息安全专业人员的能力评估与资质审核"的职能而推出的证书,是中国信息安全测评中心代表国家实施的信息安全人员能力评定证 ...

  6. QT学习(五)----360界面制作(2终结)

    继续上一章的360新特性界面.源代码:http://download.csdn.net/detail/zhangyang1990828/5241242 上一章中实现了整个界面的纯UI设计,这次我们让它 ...

  7. logstash接受checkpoint防火墙日志并用ruby分词

    直接上logstahs配置文件 input{ syslog{ type => "syslog" port => 514 } } filter { grok { matc ...

  8. B树-查找

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 查找 假设有一棵3阶B树,如下图所示. 下面说明在该B树中查找52的过程 首先,从根结点出发,根结点有两个键40和 ...

  9. 日志收集工具 Fluentd 使用教程

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247499829&idx=1&sn=1f92daa88d ...

  10. Elasticsearch实现类Google高级检索

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247483914&idx=1&sn=436f814 ...