首页 > 其他分享 >DQL语句

DQL语句

时间:2023-10-21 15:35:16浏览次数:33  
标签:语句 01 09 +------+--------+------+------+---------+------+------------+----------

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
);

image20200207010430241.png

记录:

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

image20200207011044328.png

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 秒)

标签:语句,01,09,+------+--------+------+------+---------+------+------------+----------
From: https://www.cnblogs.com/yihr/p/17779031.html

相关文章

  • SQL语句的基本使用5-多值子查询
    这个作业属于哪个课程https://edu.cnblogs.com/campus/uzz/cs3这个作业要求在哪里https://edu.cnblogs.com/campus/uzz/cs3/homework/13061这个作业的目标<SQL语句的基本使用5-多值子查询>1.在student_info表中查找与“刘东阳”性别相同的所有学生的姓名、出生......
  • SQL语句的基本使用5-多值子查询
    SQL语句的基本使用5-多值子查询这个作业属于哪个课程https://edu.cnblogs.com/campus/uzz/cs3这个作业要求在哪里https://edu.cnblogs.com/campus/uzz/cs3/homework/13074这个作业的目标SQL语句的基本使用5-多值子查询1.在student_info表中查找与“刘东阳”性......
  • Mybatis-Plus 语句日志输出
    两种方式都是在yml文件下配置第一种方式:mybatis-plus:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl这种方式会将数据也一块输出出来,遇到查询较多数据的情况会导致看不到sql语句第二种方式:logging:level:com:***......
  • SQL语句的基本使用5-多值子查询
    这个作业属于哪个课程https://edu.cnblogs.com/campus/uzz/cs3这个作业要求在哪里https://edu.cnblogs.com/campus/uzz/cs3/homework/13074这个作业的目标SQL语句的基本使用5-多值子查询1.在student_info表中查找与“刘东阳”性别相同的所有学生的姓名、出生日......
  • sql server 语句 的一些操作(千分位分隔、加百分号等)
    sqlserver语句的一些操作1、给filedName字段进行千分位分隔,保留两位小数如12345.4567会得到12,345.462、给字段filedName进行百分号显示3、根据字段的不同的值来输出不同的内容(判断)4、把时间格式按照2019-01-1214:23:18的格式显示请大家不断提意见,这里会把遇到的情况进行......
  • 无涯教程-Arduino - for语句函数
    for循环执行语句预定次数。forloop-语法for(initialize;control;incrementordecrement){//语句块}forloop-示例for(counter=2;counter<=9;counter++){//statements块将执行10次}forloop-执行序列参考链接https://www.learnfk.com/arduin......
  • Python 条件和 if 语句
    Python支持来自数学的通常逻辑条件:等于:a==b不等于:a!=b小于:a<b小于或等于:a<=b大于:a>b大于或等于:a>=b这些条件可以以多种方式使用,最常见的是在"if语句"和循环中使用。if语句是使用if关键字编写的。示例,if语句:a=33b=200ifb>a:print("bisgreate......
  • 无涯教程-Arduino - while语句函数
    while循环将连续且无限地循环,直到括号()中的表达式变为false为止,必须更改测试变量,否则while循环将永远不会退出。whileloop-while-语法while(expression){Blockofstatements;}whileloop-while-执行序列参考链接https://www.learnfk.com/arduino/arduino-w......
  • 无涯教程-Arduino - switch case语句函数
    与if语句类似,switch...case通过允许程序员指定应在各种条件下执行的不同代码来控制程序的流程,break关键字使switch语句退出,并且通常在每种情况下使用。switchcase-语法switch(variable){caselabel://statementsbreak;}caselabel:{//statemen......
  • SQL语句的基本使用5-多值子查询
    这个作业属于哪个课程https://edu.cnblogs.com/campus/uzz/cs3这个作业要求在哪里https://edu.cnblogs.com/campus/uzz/cs3/homework/13074这个作业的目标SQL语句的基本使用5-多值子查询1.在student_info表中查找与“刘东阳”性别相同的所有学生的姓名、出生日......