命令记不住

登陆

SQL 语句 DQL

SQL语句DQL

1.DQL语句

SELECT   

1.使用DQL查询

1.使用mysql官方提供的world.sql

mysql> SHOW TABLES;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
| country         |
| countrylanguage |
| stu             |
+-----------------+

DESC数据表

mysql> DESC city;
+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| ID          | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name        | char(35) | NO   |     |         |                |
| CountryCode | char(3)  | NO   | MUL |         |                |
| District    | char(20) | NO   |     |         |                |
| Population  | int(11)  | NO   |     | 0       |                |
+-------------+----------+------+-----+---------+----------------+
id             ---->自增长的序号列,主键
NAME           ---->城市名字
countrycode    ---->国家代号,三个字母组成,比如中国(CHN),美国(USA)
district       ---->省或直辖市
population     ---->人口数量

2.使用DQL
1.查看表所有的内容

SELECT * FROM city;

2.查看部分列数据,查询所有城市的人口数量(awk)

SELECT NAME,population FROM city;

2.DQL过滤查询

1 中国所有城市的信息(grep)

SELECT * FROM city WHERE countrycode='CHN';

2 中国超过500w人口的城市信息

SELECT * FROM city WHERE countrycode='CHN' AND population>5000000;

3 中国人口数量从大到小,前三的城市信息

SELECT * FROM city WHERE countrycode='CHN' ORDER BY population  DESC LIMIT 3 ;

4 浙江省人口排前三的城市

SELECT * FROM city WHERE district='zhejiang' ORDER BY population DESC LIMIT 3;

5 查询中国省名字"shan"开头的城市信息

SELECT * FROM city WHERE District LIKE 'shan%';

6 查询世界上人口数量大于500w 或者小于100人的城市

SELECT * FROM city WHERE population>5000000 OR population<100;
或者
SELECT * FROM city WHERE population>5000000 
UNION
SELECT * FROM city WHERE population<100;

一般遇到or,in的语句,我们建议修改成union的写法。

3.排序分组和聚合操作

排序、分组(常用函数)、聚合操作

DESC city
1 order by 条件列 ,一般情况是数字列

1.查询美国城市人口情况,并由小到大排序显示

SELECT * FROM city WHERE countrycode='USA' ORDER BY population;
SELECT * FROM city WHERE countrycode='USA' ORDER BY population DESC;

2.查询美国城市人口情况,并由大到小排序显示前十名

SELECT * FROM city WHERE countrycode='USA' ORDER BY population DESC LIMIT 10;

3.查询美国城市人口情况,并由大到小排序显示第十一名到第十三名

SELECT * FROM city WHERE countrycode='USA' ORDER BY population DESC LIMIT 10,3;

或者

SELECT * FROM city WHERE countrycode='USA' ORDER BY population DESC LIMIT 3 OFFSET 10;
DESC city;
2.GROUP BY 分组查询
SELECT * FROM city WHERE countrycode='CHN';

1.统计中国的人口总和

CHN        1300000000

SELECT countrycode,SUM(population)  
FROM city 
WHERE countrycode='CHN' GROUP BY countrycode

2.统计所有国家的人口总和

SELECT countrycode,SUM(population) FROM city
GROUP BY countrycode;

3.统计中国每个省的人口总和,并按总人口数量进行从大到小排序

SELECT  countrycode, District,SUM(population)  AS sp       FROM   city 
WHERE countrycode='chn'
GROUP BY District	
ORDER BY sp DESC
LIMIT 3;

4.常见常见SQL操作

1、在oss库下创建以下表,并插入相应数据。

id(学号) NAME(姓名)      age(年龄)   gender(性别)   xueke(学科)    telnum(手机)   gongzi(工资) 
1		 guosiyu		  10          f             linux          110             10000
2 		 yuhuafei         20          m             linux          120             10010
3        zhangjianfeng    19          m             linux          119             10020
4        lijiayang        18          m             linux          123             10030
5        changxueyuan     17          m             linux          132             10040
6        sunwukong        200         m             python         211             1000
7        zhubajie         201         f             python         122             2000
8        bailongma        123         f             java           345             3000
9        zhangfei         40          m             java           456             5000
10       guanyu           50          m             bdata          789             6000
-----------------------------------------------------------------------------------

CREATE TABLE opsxdev(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(30) NOT NULL ,
age TINYINT NOT NULL ,
gender ENUM('m','f') NOT NULL DEFAULT 'm',
xueke VARCHAR(20) NOT NULL ,
telnum CHAR(11) NOT NULL UNIQUE,
gongzi INT NOT NULL 
);
DESC opsxdev ;


INSERT INTO 
opsxdev(id,NAME,age,gender,xueke,telnum,gongzi) 
VALUES
(1,'guosiyu',10,'f','linux','110',10000),
(2,'yuhuafei',20,'m','linux','120',10010),
(3,'zhangjianfeng',19,'m','linux','119',10020),
(4,'lijiayang',18,'m','linux','123',10030),
(5,'changxueyuan',17,'m','linux','132',10040),
(6,'sunwukong',200,'m','python','211',1000),
(7,'zhubajie',201,'f','python','122',2000),
(8,'bailongma',123,'f','java','345',3000),
(9,'zhangfei',40,'m','java','456',5000),
(10,'guanyu',50,'m','bdata','789',6000);

SELECT * FROM opsxdev;


2、UPDATE+WHERE
```sql
UPDATE opsxdev SET gongzi=gongzi-1000 WHERE NAME='guosiyu';

3、UPDATE+SET+WHERE

SELECT * FROM opsxdev WHERE NAME='yuhuafei';
UPDATE opsxdev SET NAME='yudaye' WHERE id=2;

4、ALTER

ALTER TABLE opsxdev ADD state ENUM('1','0') NOT NULL DEFAULT '1';

5、SELECT+FROM

SELECT  NAME,gongzi  FROM    opsxdev;

6、WHERE + >

SELECT * FROM opsxdev WHERE age>100;

7、WHERE + <

SELECT *  FROM opsxdev WHERE gongzi<5000;

8、模糊查询

SELECT *  FROM  opsxdev WHERE NAME LIKE 'zhang%';

9、ORDER BY

SELECT *  FROM opsxdev WHERE xueke='linux' ORDER BY gongzi;

10、统计不同学科的总工资

SELECT xueke,SUM(gongzi)    FROM  opsxdev
GROUP BY xueke;

11、统计不同学科的平均工资

SELECT xueke,AVG(gongzi)    FROM  opsxdev
GROUP BY xueke;

12、统计不同学科的最高工资

SELECT xueke,MAX(gongzi)  FROM  opsxdev
GROUP BY xueke;

13、统计不同学科的最低工资的员工

SELECT xueke, NAME,MIN(gongzi) FROM  opsxdev
GROUP BY xueke;

14、统计男、女性别的员工数量(COUNT())

SELECT gender, COUNT(gender)  FROM opsxdev 
GROUP BY gender;

15、统计各个学科的员工数量(COUNT())

SELECT xueke , COUNT(xueke)   FROM  opsxdev
GROUP BY xueke

16、查询linux学科低于平均工资的员工名字

求linux学科平均工资

SELECT AVG(gongzi)
FROM opsxdev 
WHERE xueke='linux'
GROUP BY xueke;

查找linux部门的,低于9620元的员工姓名

SELECT NAME,gongzi  FROM opsxdev
WHERE xueke='linux'
AND gongzi<9620;

SELECT NAME,gongzi  FROM opsxdev
WHERE xueke='linux'
AND gongzi<(SELECT AVG(gongzi)
FROM opsxdev 
WHERE xueke='linux'
GROUP BY xueke);

17、linux部门最低工资员工工资情况,与其他学科对比的排名情况

SELECT xueke,NAME ,MIN(gongzi) AS gongzi FROM opsxdev
WHERE xueke='linux'
GROUP BY xueke
UNION 
SELECT xueke ,NAME ,gongzi FROM opsxdev
WHERE xueke !='linux'
ORDER BY gongzi DESC ;
推荐阅读