MySQL基础之DQL续

基础回顾:

 1,WHERE 子句

WHERE 子句用于提取那些满足指定条件的记录。

---SQL WHERE 语法----
SELECT column1, column2, ...
FROM table_name
WHERE condition;

----参数说明:----
column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
table_name:要查询的表名称。

---下面的 SQL 语句从 "Websites" 表中选取国家为 "CN" 的所有网站---
SELECT * FROM Websites WHERE country='CN';
2,SELECT DISTINCT 语句

在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。DISTINCT 关键词用于返回唯一不同的值。

---SQL SELECT DISTINCT 语法---
SELECT DISTINCT column1, column2, ...
FROM table_name;

---参数说明---
column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
table_name:要查询的表名称。

/*下面的 SQL 语句仅从 "Websites" 表的 "country" 列中选取唯一不同的值,也就是去掉 "country" 列重复值:*/
SELECT DISTINCT country FROM Websites;
3,ORDER BY 关键字

ORDER BY 关键字用于对结果集进行排序。ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

---ORDER BY 语法---
SELECT `column1`, `column2`, ...FROM `table_name`
ORDER BY column1, column2, ... ASC|DESC;

/*注意column1, column2, ...:要排序的字段名称,可以为多个字段。
ASC:表示按升序排序。
DESC:表示按降序排序。*/

---降序---
SELECT * FROM Websites ORDER BY alexa DESC;

---升序---
SELECT * FROM Websites ORDER BY alexa ASC;

---ORDER BY 多列排序---
SELECT * FROM Websites ORDER BY country,alexa;

---使用 DISTINCT 子句,去除‘列’字段中重复的值---
SELECT DISTINCT `column_name` FROM `table_name`
ORDER BY `column_name`;
4,INSERT INTO 语句

INSERT INTO 语句用于向表中插入新记录。

---SQL INSERT INTO 语法:可以有两种编写形式---

---第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:---
INSERT INTO table_name
VALUES (value1,value2,value3,...);


---第二种形式需要指定列名及被插入的值:---
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);


/*参数说明:
table_name:需要插入新记录的表名。
column1, column2, ...:需要插入的字段名。
value1, value2, ...:需要插入的字段值。*/

---假设我们要向 "Websites" 表中插入一个新行---
INSERT INTO Websites (name, url, alexa, country)
VALUES ('百度','https://www.baidu.com/','4','CN');
5,UPDATE 语句

UPDATE 语句用于更新表中已存在的记录。

---SQL UPDATE 语法---
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

---参数说明:---
table_name:要修改的表名称。
column1, column2, ...:要修改的字段名称,可以为多个字段。
value1, value2, ...:要修改的值,可以为多个值。
condition:修改条件,用于指定哪些数据要修改。

--注意 SQL UPDATE 语句中的 WHERE 子句!--
WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

---假设我们要把 "课程" 的 alexa 排名更新为 100,country 改为 UK---
UPDATE Websites SET Alexa='100', country='UK' 
WHERE name='课程';

6,DELETE 语句

DELETE 语句用于删除表中的行。

---DELETE 语法---
DELETE FROM table_name
WHERE condition;

---参数说明:---
table_name:要删除的表名称。
condition:删除条件,用于指定哪些数据要删除。

---请注意 SQL DELETE 语句中的 WHERE 子句----
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

---假设我们要从 "Websites" 表中删除网站名为 "Facebook" 且国家为 USA 的网站---
DELETE FROM Websites
WHERE name='Facebook' AND country='USA';


---删除所有数据:在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:---
DELETE FROM table_name;
/*注释:在删除记录时要格外小心!因为不能重来*/

本次笔记:

1,比较运算符

包括:=等于、 > 大于、< 小于、>= 大于等于、<=小于等于、 !=或 <>不等于

---where A operator B 的形式----
select `column_name` from `table_name`  where A operator B;
select * from table_teachers  where age > 30;

2,逻辑运算符(AND , OR, NOT)

---语法:where condition1 and condition2;---
---语法:where condition1 or condition2;---
---语法:where  not condition;---

select `column_name` from `table_name`  where condition1 and condition2;

---举例1---
select * from table_teachers  
where age > 30 and country = 'CN';

---举例2---
select * from table_teachers  
where nor (age > 30 and country = 'CN');

---举例3---
SELECT * FROM Websites 
WHERE alexa > 15 AND (country='CN' OR country='USA');

 3,IN 查询多个条件

---语法:where `column_name` in `value`;---
select * from `table_name` where `column_name` in `value`;

select * from table_teachers where country IN ('CN','UK'); 
select * from table_teachers where country NOT IN ('CN','UK'); 

4,BETWEEN AND 查询两值间的数据范围

  • BETWEEN AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
  • 在不同的数据库中,BETWEEN 操作符会产生不同的结果!在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。因此,请检查您的数据库是如何处理 BETWEEN 操作符!
SELECT * FROM `table_name` WHERE `column_name` BETWEEN `value` AND `value`;
SELECT * FROM `teachers` WHERE (`age` BETWEEN 20 AND 25) AND (`country` NOT IN ('CN','UK'));

5,IS NULL查询空数据

NULL 值代表遗漏的未知数据。默认的,表的列可以存放 NULL 值。如果表中的某个列是可选的,那么可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。NULL 用作未知的或不适用的值的占位符。

注释:无法比较 NULL 和 0;它们是不等价的。

无法使用比较运算符来测试 NULL 值,比如 =、!= 或 <>。

我们必须使用 IS NULL 和 IS NOT NULL操作符。

select * from `table_name` where `column_name` is null;
---举例---
SELECT * FROM table_teachers WHERE ‘email’ IS NULL;

6,使用LIKE模糊查询

对于SQL 中的通配符有以下类型:

通配符说明
%替代 0 个或多个字符
_替代一个字符
[charlist]字符列中的任何单一字符
或 [!charlist]不在字符列中的任何单一字符
SELECT * FROM `table_name` WHERE `column_name` LIKE  `value`;
SELECT * FROM `courses` WHERE `name` LIKE 'D%';
--注意:其中 'D%' 表示以 D 开头的所有单词,% 表示为通配符,可以替代 0 个或多个字符--

7,SELECT TOP 子句

SELECT TOP 子句用于规定要返回的记录的数目。SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。

注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。

---SQL Server 及 MS Access 的语法---
SELECT TOP number|percent column_name(s)
FROM table_name;

---MySQL 语法---
SELECT column_name(s)FROM table_name LIMIT number;
---举例---
SELECT * FROM Persons LIMIT 5;

---Oracle 语法---
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;
---举例---
SELECT * FROM Persons WHERE ROWNUM <=5;

---下面的 SQL 语句从 "Websites" 表中选取头两条记录:---
SELECT * FROM Websites LIMIT 2;

SQL SELECT TOP PERCENT ,在 Microsoft SQL Server 中还可以使用百分比作为参数。

---从 websites 表中选取前面百分之 50 的记录:---
SELECT TOP 50 PERCENT * FROM Websites;
---从教师表(teachers)中查询一条年龄最大的中国教师的信息---
---解法一:---
SELECT * FROM `teachers` 
WHERE `country` = 'CN'
ORDER BY `age` DESC
LIMIT 1;

---解法二:----
SELECT * FROM `teachers`
WHERE (`country`, `age`) = (
	SELECT `country`, MAX(`age`)
	FROM `teachers`
	GROUP BY `country`
	HAVING `country` = "CN"
);

8,DQL 聚合函数

将一列数据作为一个整体,进行纵向计算。

常见的聚合函数
函数说明
count统计数量
max最大值
min最小值
avg平均值
sum求和
SELECT 聚合函数(字段列表) FROM 表名;
---注意:null值不参与所有聚合函数运算---

举例如下:

--1、统计企业员工数量--
select count(*) from table_empolyee;
select count(idcard) from table_empolyee;

--2、统计企业员工的平均年龄--
select avg(age) from table_empolyee;

--3、统计该企业员工的最大年龄--
select max(age) from table_empolyee;

--4、统计企业员工的最小年龄--
select min(age) from table_empolyee;

--5、统计上海地区员工的年龄之和--
select sum(age) from table_empolyee where workaddress = '上海';

9,DQL分组查询

--语法--
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后多虑条件];

--where与having区别--
/*执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

判断条件不同:where不能对聚合函数进行判断,而having可以。*/

--注意:执行顺序为where > 聚合函数 > having--
--分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义--

--举例--
--1、根据性别分组,统计女员工和男员工的数量--
select gender, count(*)
from table_employee 
group by gender;

--2、根据性别分组,统计女员工和男员工的平均年龄--
select gender,avg(age)
from table_employee 
group by gender;

--3、查询年龄小于45岁的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址--
select wordaddress, count(*)
from table_employee 
where age < 45
group by workadress;

10,DQL排序查询

--语法:如果多字段排序,当第一个字段值相同时,才会根据第二字段进行排序--
SELECT 字段列表
FROM 表名
ORDER BY 字段1 排序方式1 字段2 排序方式2;

--排序方式--
ASC 升序(默认值)
DESC 降序

--举例--
--1、根据年龄对公司的员工进行升序排序--
select *
from table_employee
order by age asc;

select *
from table_employee
order by age;

--2、根据年龄对公司的员工进行降序排序--
select *
from table_employee
order by age desc;

--3、根据入职时间,对员工进行降序排序--
select *
from table_employee
order by entrydate desc;

--4、根据年龄对公司的员工进行升序排序,年龄相同的再按入职时间降序排序--
select *
from table_employee
order by age asc, entrydate desc;

 11,DQL分页查询

--语法:--
SELECT 字段列表
FROM 表名
LIMIT 起始索引,查询记录数;

--1、查询第1页员工数据,每页展示10条记录--
select *
from table_employee
limit 0,10;

--或者--
select *
from table_employee
limit 10;

--2、查询第2页员工数据,每页展示10条记录,起始索引=(页码 - 1)*每页展示记录数--
select *
from table_employee
limit 10,10;

注意:起始索引从0开始,起始索引=(查询页码 - 1)* 每页显示记录数,

分页查询是数据库的方言,不同的数据库有不同的实现,MySQL是 LIMIT。

如果查询的第一页数据,其实索引可以省略,直接简写为limit 10。

12、DQL的执行顺序

编写顺序如下(执行顺序为数字序号):

SELECT 字段列表 4 (字段名 [as]别名)
FROM 表名列表 1
WHERE 条件列表 2  (分组之前过滤,比较运算符,逻辑运算符,like ,between...and, and, in, or)
GROUP BY 分组字段列表 3
HAVING 分组后条件列表 (分组之后过滤)
ORDER BY 排序字段列表 5 (升序asc,降序desc)
LIMIT 分页参数 6  (起始索引,从0开始;每页展示记录数)

  • 35
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值