DQL 数据查询语言 select
1.select
1.select 单独使用
(1) 查询数据库的参数
查看端口:
select @@port;
查看数据路径
select @@datadir;
(2)调用内置函数
查看当前库
select database();
CONCAT 将内容拼接
select concat(user,host) from mysql.user;
select concat(user,'@',host) from mysql.user;
列转行
select group_concat(xid) from student;
求和
SELECT SUM(xid) FROM student;
(3) 简易计算器
select 4*5;
2.select 配合其他子句使用
select 查询表的内容
(1) 子句列表介绍
from 查询对象是谁(表,视图)
where 过滤字句
group by 分组子句(类似于数组,统计分析类)
having 后过滤子句
order by 排序子句
limit 限制子句(分页子句)
select 配合 from 使用
1.查询表中所有的数据(cat)
select * from city;
2.查询name和population列信息
select name,population from city;
select 配合 from where 使用
-- 1.查询中国所有的城市信息
SELECT * FROM city
WHERE CountryCode='CHN';
-- 2. 查询ID为100的城市信息
SELECT * FROM city
WHERE ID=100;
-- 3. 查询 中国河北省的城市信息
SELECT * FROM city
WHERE CountryCode='CHN' AND district='hebei';
-- 4. 查询 中国或美国的城市信息
SELECT * FROM city
WHERE CountryCode='CHN' OR CountryCode='USA';
或者
SELECT * FROM city
WHERE CountryCode IN ('CHN','USA');
或者
SELECT * FROM city
WHERE CountryCode='CHN'
UNION ALL
SELECT * FROM city
WHERE CountryCode='USA';
-- where 配合范围查询
-- 例子 :
-- 1. 查询人口数量小于100人的城市
SELECT * FROM city
WHERE Population<100;
-- 2. 查询人口数量在100w-200w之间的城市
SELECT * FROM city
WHERE Population>=1000000 AND Population<=2000000;
或者
SELECT * FROM city
WHERE Population BETWEEN 1000000 AND 2000000;
-- 3.查询国家代号是CH开头的城市
SELECT * FROM city
WHERE CountryCode LIKE 'CH%';
-- 注意 % 放在字符前,匹配时不走索引,比较慢,所以,我们通常都放在字符后面
-- where 配合范围查询
-- 例子 :
-- 1. 查询人口数量小于100人的城市
SELECT * FROM city
WHERE Population<100;
-- 2. 查询人口数量在100w-200w之间的城市
SELECT * FROM city
WHERE Population>=1000000 AND Population<=2000000;
或者
SELECT * FROM city
WHERE Population BETWEEN 1000000 AND 2000000;
-- 3.查询国家代号是CH开头的城市
SELECT * FROM city
WHERE CountryCode LIKE 'CH%';
-- 注意 % 放在字符前,匹配时不走索引,比较慢,所以,我们通常都放在字符后面
-- 1.2.4 group by 分组子句 配合 聚合函数应用
-- 什么是聚合函数?
COUNT() -- 计数
SUM() -- 求和
AVG() -- 平均值
MAX() -- 最大值
MIN() -- 最小值
GROUP_CONCAT -- 聚合列值
-- MySQL结果集现实的特点:
在结果集显示时,必须是 一对一的方式,不能是一对多的形式。
-- 例子 :
-- 1. 统计一下每个国家的人口总数
SELECT CountryCode,SUM(Population)
FROM city
GROUP BY (CountryCode);
-- 2. 统计中国每个省的人口总数
SELECT District,SUM(Population)
FROM city
WHERE CountryCode='CHN'
GROUP BY (District);
-- 3. 统计一下中国每个省的城市个数,及城市名
SELECT District,COUNT(NAME),GROUP_CONCAT(NAME) FROM city
WHERE CountryCode='CHN'
GROUP BY (District);
-- 4. 统计每个国家的城市个数
SELECT CountryCode,COUNT(District)
FROM city
GROUP BY (CountryCode);
-- 1.2.6 having 后判断
-- 1. 统计中国每个省的人口总数,只显示总人口数大于500w的省信息.
SELECT district,SUM(population) FROM city
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population) >=5000000;
-- 1.2.7 order by 排序子句
-- 例子:
-- 1. 查询中国所有城市信息,人口数从大到小排序输出.
SELECT * FROM city
WHERE countrycode='CHN'
ORDER BY population DESC ;
-- 2. 查询中国所有城市信息,按城市名排序.
SELECT * FROM city
WHERE countrycode='CHN'
ORDER BY NAME;
-- 3. 查询中国所有省的总人口,并按总人口数从大到小排序输出.
SELECT district,SUM(population) FROM city
WHERE countrycode='CHN'
GROUP BY district
ORDER BY SUM(population) DESC;
多表查询
-- 1. 查询oldguo老师教的学生名.
SELECT
CONCAT(teacher.tname,"_",teacher.tid) AS "教师名",
GROUP_CONCAT(student.`xname`) AS "学生列表"
FROM teacher
JOIN course
ON teacher.`tid`=course.`tid`
JOIN score
ON course.`cid`=score.`cid`
JOIN student
ON score.`xid`=student.`xid`
WHERE teacher.tname='oldguo'
GROUP BY teacher.tid,teacher.tname;
SELECT
CONCAT(teacher.tname,"_",teacher.tid) AS "教师名",
course.cname AS "课程名",
AVG(score.score) AS "平均分"
FROM teacher
JOIN course
ON teacher.`tid`=course.`tid`
JOIN score
ON course.`cid`=score.`cid`
WHERE teacher.tname='oldguo'
GROUP BY teacher.tid,teacher.tname,course.cname;
-- 3. 每位老师所教课程的平均分,并按平均分排序.
SELECT
CONCAT(teacher.tname,"_",teacher.tid) AS "教师名",
course.cname AS "课程名",
AVG(score.score) AS "平均分"
FROM teacher
JOIN course
ON teacher.`tid`=course.`tid`
JOIN score
ON course.`cid`=score.`cid`
GROUP BY teacher.tid,teacher.tname,course.cname;
-- 4. 查询白龙马,学习的课程名称有哪些.
SELECT
CONCAT(student.xname,"_",student.`xid`) AS "学生姓名",
GROUP_CONCAT(course.`cname`) AS "课程列表"
FROM student
JOIN score
ON student.xid = score.xid
JOIN course
ON score.`cid`=course.`cid`
WHERE student.xname='白龙马'
GROUP BY student.xid,student.xname;
-- 5.1 统计每位老师,每门课程,分别的收入情况
SELECT
CONCAT(teacher.`tname`,"_",teacher.`tid`) AS "讲师名",
course.`cprice`*COUNT(score.xid) AS "课程收入"
FROM teacher
JOIN course
ON teacher.`tid` = course.`tid`
JOIN score
ON course.`cid` = score.`cid`
GROUP BY teacher.`tid`,teacher.`tname` , course.`cid`;
-- 7. 查询oldboy老师教的学生不及格的学生名单.
SELECT
CONCAT(teacher.tname,"_",teacher.tid) AS "教师名"
,GROUP_CONCAT(CONCAT(student.xname,":",score.score))
FROM teacher
JOIN course
ON teacher.`tid`=course.`tid`
JOIN score
ON course.`cid`=score.`cid`
JOIN student
ON score.`xid`=student.`xid`
WHERE teacher.`tname`='oldboy' AND score.`score`<60
GROUP BY teacher.tid,teacher.tname;
-- 8. 统计每位老师不及格学生名单.
SELECT
CONCAT(teacher.tname,"_",teacher.tid) AS "教师名"
,GROUP_CONCAT(CONCAT(student.xname,":",score.score))
FROM teacher
JOIN course
ON teacher.`tid`=course.`tid`
JOIN score
ON course.`cid`=score.`cid`
JOIN student
ON score.`xid`=student.`xid`
WHERE score.`score`<60
GROUP BY teacher.tid,teacher.tname;
-- 9. 每位老师所教课程的平均分,并按平均分排序.
SELECT
CONCAT(teacher.tname,"_",teacher.tid) AS "教师名",
course.`cname`,
AVG(score.`score`)
FROM teacher
JOIN course
ON teacher.`tid`=course.`tid`
JOIN score
ON course.`cid`=score.`cid`
GROUP BY teacher.tid,teacher.tname,course.`cid`;
-- 10. 查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分.
SELECT course.`cid`,MAX(score.`score`),MIN(score.`score`)
FROM course
JOIN score
ON course.`cid`=score.`cid`
GROUP BY course.`cid`;
-- 11. 查询平均成绩大于60分的同学的学号和平均成绩.
SELECT
CONCAT(student.`xname`,"_",student.`xid`),
AVG(score.`score`)
FROM student
JOIN score
ON student.`xid`=score.`xid`
GROUP BY student.`xname`,student.`xid`
HAVING AVG(score.`score`)>60
ORDER BY AVG(score.`score`) DESC ;
-- 12. 统计各位老师,所教课程的及格率
SELECT
CONCAT(teacher.tname,"_",teacher.tid) AS "教师名",
course.`cname`,
CONCAT(COUNT(CASE WHEN score.score>60 THEN 1 END)/COUNT(score.xid)*100,"%")
FROM teacher
JOIN course
ON teacher.`tid`=course.`tid`
JOIN score
ON course.`cid`=score.`cid`
GROUP BY teacher.tid,teacher.tname,course.`cid`;
-- 13. 统计每门课程:优秀(85分以上),良好(70-85),一般(60-70),不及格(小于60)的学生列表
SELECT
course.`cname` AS 课程名称,
GROUP_CONCAT(CASE WHEN score.`score` >= 85 THEN student.xname END ) AS "优秀",
GROUP_CONCAT(CASE WHEN score.`score` >=70 AND score.`score` < 85 THEN student.xname END) AS "良好",
GROUP_CONCAT(CASE WHEN score.`score` >=60 AND score.`score` <70 THEN student.xname END )AS "一般",
GROUP_CONCAT(CASE WHEN score.`score` <60 THEN student.xname END ) AS "不及格"
FROM student
JOIN score
ON student.xid = score.xid
JOIN course
ON score.`cid`=course.`cid`
GROUP BY course.`cid`;
1.5 left join
一般应用在强制驱动板时,强制小结果集驱动大表
生产中可以使用left join 强制驱动表,尽量减少next loop的出现
为什么要强制? inner join 优化器 自动选择,按照索引选择的几率比较大
1.6 别名
1.列别名
作用:展示数据时,可以随心的展示想要的列名
例如:CONCAT(teacher.tname,"_",teacher.tid) AS "教师名"
列别名尽量有意义,根据select子句的执行逻辑,只能在having之后才能调用
2.表别名
DQL 数据查询语言 select的更多相关文章
- 八:SQL之DQL数据查询语言单表操作
前言: DQL数据库查询语言是我们在开发中最常使用的SQL,这一章总结了单表操作部分的常用查询方式 主要操作有:查询所有字段.查询指定字段.查询指定记录.带IN的关键字查询,范围查询,陪查询.查询空值 ...
- DQL 数据查询语言 IS (information_schema)
3.information_schema 统计信息库 1.介绍: 视图 1.安全: 只允许查询,不知道操作的对象是谁. 2.方便: 只需要简单的select语句即可使用. 2.作用: 1.方便我们做数 ...
- 第六章 DQL 数据查询语言
一.select 简单查询命令 #1.查询表中所有的数据 mysql> select * from test.student; #2.查看所有数据之前,先查看数据量 mysql> sele ...
- DQL 数据查询语言
查询数据(SELECT) # 查询所有数据 - 很危险,数据量过大,容易导致内存溢出而宕机 mysql> select * from student; # 先查询数据总量,然后决定是否可以查询所 ...
- 九:SQL之DQL数据查询语言多表操作
前言: 一:数据准备 员工表emp 和部门表 dept 注意:我在录入员工表的时候,特意添加了两条没有部门的员工,他们的部门id对应为null; --分别创建部门和员工表,并实现一对多关系 DROP ...
- MySQL数据库之DQL(数据查询语言)
1.MySQL之DQL查询AS CONCAT LIKE的使用 (1)select 列名1,列名2,...... from 表名 [where 条件] 查询所有字段用*,不带where条件的话,就会把表 ...
- DQL数据查询语言——连接查询
--内连接 两种写法 等值连接select r.*,b.bummc from t_hq_ryxx r, t_hq_bm b where r.bumbm = b.bumbm select r.*,b.b ...
- DQL数据查询语言
--查询全表select * from t_hq_ryxx; --查询字段select xingm as 姓名 ,gongz as 工资 from t_hq_ryxx; --链接字段查询select ...
- DQL 数据查询语言 show
2.show show databases; 查看所有的库 show tables; 查看当前库的所有的表 show tables from database; 查看指定的库下的所有表 show pr ...
随机推荐
- 55、saleforce 学习笔记二
String goodsName = 'abcd1123汉字显示';//测试文本 System.debug('简化后的字符串名称为:'+goodsName.abbreviate(5)); //返回简化 ...
- jquery中attr方法和prop方法的区别
关于checked的属性,最重要的概念就是你要记住,它跟checked的状态值是毫无关系的,设置checked = "checked"或者checked = "true& ...
- 自定义npm命令行工具,并发布到www.npmjs.com
1.自定义一个npm脚本 - 1.新建一个项目(在任何路径都可以); - 2.使用`npm init -y`初始化项目 - 3.新建一个index.js文件,在文件的第一行添加 `#!/usr/bin ...
- bash arithmatic
Arithmetic in bash is done with $ and double parentheses: echo "$(($num1+$num2))" Or $ and ...
- MySQL配置(二)
上篇文章简单的讲了一下MySQL的配置,这章我在具体讲述一下我所配置的一些内容. 一.密码策略 MySQL5.7默认安装了密码安全检查的插件.默认密码检查策略要求密码必须包含:大小写字母 ...
- Linux(三)—— 项目部署环境搭建
目录 项目部署环境搭建 一.linux上网 二.rpm包管理 1.光盘挂载 2.安装卸载rpm包 3.查询是否安装 4.查看软件包 5.互相依赖关系的软件包 三.yum包管理 1.使用aliyun的y ...
- PHP数组循环遍历的几种方式
PHP数组循环遍历 1.for循环 <?php //语法 for (init counter; test counter; increment counter) { code to be exe ...
- vue的品牌添加与筛选的功能集合
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- LinkedBlockingQueue 学习
LinkedBlockingQueue 链表队列,其元素构成为: static class Node<E> { E item; Node<E> next; Node(E x) ...
- python 操作redis数据
python 操作redis 各种类型的数据 # encoding:utf-8 import redis import time def main(): """ redi ...