在实际开发中,对数据的查询占sql操作的90%以上,可见SQL查询是很重要的

首先我们创建三张学习表

创建表

学生表

#创建表
CREATE TABLE LX_student( studentId INT(8) PRIMARY KEY NOT NULL, studentName VARCHAR(8) NOT NULL, studentSex VARCHAR(2) NOT NULL, Birthday DATE NOT NULL, Nation VARCHAR(6) NOT NULL, Address VARCHAR(20) NOT NULL, majorId INT(4), stuResume TEXT, stuCertificate BLOB,
FOREIGN KEY (majorId) REFERENCES LX_major(majorId)
);
​
#插入数据
INSERT INTO LX_student(studentId,studentName,studentSex,Birthday,Nation,Address,majorId)
VALUES (06053113,'唐李生','男','1987-4-19','汉','湖北省麻城',0501),
(07042219,'黄耀','男','1989-1-2','汉','黑龙江省牡丹江市',0403),
(06041138,'华美','女','1987-9-11','汉','河北省保定市',0403),
(07045120,'刘权利','男','1989-10-20','回','湖北省武汉市',0403),
(08055117,'王燕','女','1990-10-20','回','河南省安阳市',0501),
(08045142,'郝明星','女','1989-11-29','满','辽宁省大连市',0403),
(08053101,'高猛','男','1990-2-3','汉','湖北生黄石市',0501),
(08053124,'多桑','男','1988-10-26','藏','西藏',0501),
(08053160,'郭政强','男','1986-11-24','土家','湖南省吉首',0501),
(08053116,'陆敏','女','1990-8-3','汉','广东省东莞',0501),
(08053131,'林惠萍','女','1989-4-12','壮','广西省柳州市',0501),
(07093305,'郑家谋','男','1988-9-12','汉','上海市',0904),
(07093342,'罗家艳','女','1988-5-16','满','北京市',0904),
(07093325,'史玉磊','男','1988-9-11','汉','湖北省孝感市',0904),
(07093317,'凌晨','女','1988-6-28','汉','浙江省温州',0904),
(08041136,'徐栋梁','男','1989-12-20','回','陕西咸阳',0403),
(08041127,'巴朗','男','1989-12-25','蒙古','内蒙古',0403);

员工表

#创建表
CREATE TABLE emp (empno INT,ename VARCHAR (50),job VARCHAR (50),mgr INT,hiredate DATE,sal DECIMAL (7, 2),comm DECIMAL (7, 2),deptno INT
) ;
​
#插入数据
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

部门表

#创建表
CREATE TABLE dept (deptno INT,dname VARCHAR (14),loc VARCHAR (13)
) ;
​
#插入数据
INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO dept VALUES(40, 'OPERATIONS', 'BOSTON'); 

MySQL查询语句

基础查询

语法:SELECT * | 字段一,字段二... FROM 表名;

注意 : * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。

例如:

#查询学生表中每个学生的名字、性别、出生年月日
SELECT studentName,studentSex,Birthday FROM LX_student;

条件查询

语法:SELECT * | 字段一,字段二... FROM 表名 WHERE 语句1,语句2...

#查询所有学生学院名,起别名,如果在别名中要加入特殊字符要用双引号引起
SELECT studentName AS `学生名字` FROM LX_student;#as可以被省略
​
​
#查询所有学生学院名(不可重复)
SELECT DISTINCT collegeName AS `学院名称` FROM LX_college;  #DISTINCT为去重关键字
​
​
#查询民族是汉族的学生
SELECT * FROM LX_student WHERE Nation = '汉';
​
​
#查询民族是汉族、回族的学生
SELECT * FROM LX_student WHERE Nation IN('汉','回');
​
​
#查询名字只有两个字的学生
SELECT * FROM LX_student WHERE studentName LIKE '__';#两个字就两个下划线
SELECT * FROM LX_student WHERE studentName LIKE '___';#三个字就三条下划线
​
#查询学号最后一位为7的学生
SELECT * FROM LX_student WHERE studentId LIKE '%7';
​
​
#查询薪资在2000-3000之间(包含)的员工信息
SELECT * FROM emp WHERE sal BETWEEN 2000 and 3000;
  1. 别名:起别名可在列名、表名后加 AS '别名' 或者省略AS直接写'别名'(注意:别名中若有特殊符号一定要用英文的''引起)

  1. 去重:在SELECT后加上关键字DISTINCT

  2. 条件判断:> < = <>(不等于) != >= <=比较特殊的就是<>号他是SQL语句中的特有逻辑判断符

  3. IN(值1、值2....):只要判断条件满足IN里的任意一值相等则为true

  4. 模糊查询:关键字like,其中_(英文下划线,代表一个字符),%(代表任意数量个字符)

  5. BETWEEN 值1 AND 值2:意思为大于等于值1,小于等于值2,值1 必须大于 值2 不然报错

  6. AND OR NO:AND同与,OR 同或,NOT同非

分组查询

常数列

#常数列
#role就是常数列
SELECT s.*,'1' AS role FROM tb_student s;

常数列也可以理解为自建列,只是我们为了得到查询结果而新建的一个无实际意义的列,他不会影响表数据

聚合函数

#聚合函数(注意:所有的null值不参与聚合函数的运算)
#统计该企业的员工数量
SELECT COUNT(*) FROM emp;
#通常新建常数列,并统计常数列数
SELECT e.*,'0' AS role FROM emp e;
SELECT COUNT(*) FROM emp;
​
​
#统计该企业员工的平均工资
SELECT AVG(sal) '平均工资' FROM emp;
​
​
#统计该企业员工的最高工资
SELECT MAX(sal) FROM emp;
​
​
#统计该企业员工的最低工资
SELECT MIN(sal) FROM emp;
​
​
#求出职位为经理的全部员工的工资之和
SELECT SUM(sal) '经理总工资' FROM emp WHERE job = 'MANAGER';

分组查询

语法:SELECT * | 字段一,字段二... FROM 表名 GROUP BY 字段一、字段二... HAVING 条件1,条件2...;

#分组查询
​
#根据员工的职位进行分组,统计各职位人数
SELECT job,COUNT(*) FROM emp GROUP BY job;
​
​
#根据员工的职位进行分组,求出各职位的平均工资
SELECT job,AVG(sal) FROM emp GROUP BY job;
​
​
#查询工资大于1500的员工,并根据职位分组,获取职位人数大于等于2的职位
​
SELECT ename FROM emp WHERE sal > 1500;#查询工资大于1500的员工
​
SELECT job,ename FROM emp WHERE sal > 1500 GROUP BY job;#查询工资大于1500的员工,并根据职位分组
​
SELECT job,COUNT(*)
FROMemp
WHERE sal > 1500
GROUP BY job
HAVING COUNT(*) >= 2 ;

重点:where和having的区别

  1. 执行时机不同:where是分组之前进行过滤,不满足where条件不进行分组;而having是分组之后对结果进行过滤

  2. 判断条件不同:where不能对聚合函数进行判断,having可以

排序查询

语法:语法:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;(第一个字段判断相同,再由第二个字段条件进行判断)

排序方式:ASC 升序 DESC 降序

#根据入职日期对公司员工进行升序
SELECT * FROM emp;
SELECT * FROM emp ORDER BY hiredate ASC;
​
#根据年龄对公司员工进行升序排序
SELECT *,YEAR(NOW()) - YEAR(e.hiredate) AS '工作年数' FROM emp e ORDER BY YEAR(NOW()) - YEAR(e.hiredate) ASC;
​
​
#根据年龄对公司员工进行排序,年龄相同,再按入职时间进行排序
SELECT *,YEAR(NOW()) - YEAR(e.hiredate) AS '工作年数' FROM emp e ORDER BY YEAR(NOW()) - YEAR(e.hiredate) ASC,hiredate ASC;

分页查询

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

页数、起始索引和查询记录数的关系:

起始索引 = (页数 - 1) * 查询记录数(例题可见题2)

#查询第一页前五条员工信息
SELECT * FROM emp LIMIT 0,5;
​
#查询查询第二页前五条员工信息
SELECT * FROM emp LIMIT 5,5; #(2-1)*5 = 5

下一章(http://t.csdn.cn/h2Mvb)我们在一起学习多表查询!!!

记得先点赞、评论、关注哟!!

两小时学会MySQL查询语句(上篇)相关推荐

  1. 两小时学会MySQL查询语句(下篇)

    学生表 #创建表 CREATE TABLE LX_student( studentId INT(8) PRIMARY KEY NOT NULL, studentName VARCHAR(8) NOT ...

  2. 一个小时学会MySQL数据库

    致谢:一个小时学会MySQL数据库 一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库 ...

  3. 【转载】一个小时学会MySQL数据库

    一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数据库 ...

  4. 网上搜集的MySQL查询语句大全集锦(经典珍藏)

    原文地址为: 网上搜集的MySQL查询语句大全集锦(经典珍藏) SQL查询语句大全集锦 MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW ...

  5. mysql 查询语句执行顺序_MySQL 查询语句执行过程

    MySQL 查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注的是, ...

  6. java mysql查询语句_Mysql查询语句执行过程

    Mysql查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注的是, ...

  7. 一条mysql查询语句的执行过程

    当我们执行一条MySQL查询语句时,对于客户端而言是一个很简单的过程,但对于服务端来说其内部却会涉及到一些复杂的组件和处理逻辑.了解MySQL语句的内部执行原理,有助于我们更好地去处理一些复杂的SQL ...

  8. php面试专题---MYSQL查询语句优化

    php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...

  9. mysql查询语句详解_基于mysql查询语句的使用详解

    1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...

最新文章

  1. sql case 语句
  2. 第21天学习Java的笔记-数学工具类Arrays,Math
  3. jekins构建触发器详解
  4. 适合利用计算机模拟的是,计算机模拟在数学建模中的应用
  5. SpringCloud OpenFeign + Nacos正确打开方式!
  6. 信息学奥赛一本通(1163:阿克曼(Ackmann)函数)
  7. 线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?
  8. 小米总参php面试题_php面试题之二——Javascript(基础部分)
  9. 《Java8实战》-第十章笔记(用Optional取代null)
  10. 外部数据源 之 Plugin 可插拔的方式整合到Spark中/Spark源码中
  11. [3]⾃自定义视图、视图控制器
  12. vfp 打开服务器文件,vfp获取远程服务器时间
  13. 芒果云 在线代码编辑器
  14. OpenCVSharp学习(十二):图片的逻辑运算
  15. 中国人为什么喜欢创业?
  16. 非常全面的数字人解决方案(含源码)
  17. 图像分析之直方图分析
  18. 什么是“黑天鹅现象”?
  19. 计算机与网络 文献,计算机与网络专著参考文献 计算机与网络参考文献怎么写...
  20. 03:计算(a+b)/c的值

热门文章

  1. CCF CSP 点亮数字人生(记忆化搜索+拓扑排序判环)
  2. C++实现K-means,聚类原理解析(并用在图片像素点聚类)
  3. CS61A Lab 14
  4. NEO-M8T+千寻基站+RTKNAVI进行RTK定位
  5. Windows 10 多用户同时远程登录
  6. day55判断子序列_不同的子序列
  7. 操作系统——索引分配
  8. APP端接入支付宝支付接口
  9. [转贴精华]《新概念》英语学习方法完全手册-学新概念英语必读
  10. 关于google搜索栏首字母粘连问题