(tip:sql脚本在文末尾)

DQL-数据库查询操作

1 查询基础

1.1 select 操作

#查询所有学生信息
SELECT * FROM student#查询学生表中的学号与姓名
SELECT sno,sname FROM student#查询学生表中的学号与姓名,并且给一个字段别名
SELECT sno AS studentNo,sname AS '姓名' FROM student#查询学生表中的姓名信息,并过滤掉相同姓名信息
SELECT DISTINCT sname FROM student#查询学生个数,年龄总和,平均年龄,最大年龄,最小年龄,并给他们一个别名
SELECT COUNT(*) AS '学生个数',SUM(age) AS '年龄总和',AVG(age) AS '平均年龄',MAX(age) AS '最大年龄',MIN(age) AS '最小年龄' FROM student

1.2 where

参考SQL

#查询所有男生的信息
SELECT * FROM student WHERE sex = '男'#查询所有21岁男生的信息
SELECT * FROM student WHERE sex = '男' and age = 21

1.3 模糊查询

参考SQL

#查询姓‘陈’的同学
SELECT * FROM student WHERE sname LIKE '陈%'#查询名字中出现‘陈’的同学
SELECT * FROM student WHERE sname LIKE '%陈%'#查询姓陈的二个字姓名的同学
SELECT * FROM student where sname LIKE '陈_' #查询名字结尾是‘樱’的三个字姓名的同学
SELECT * FROM student where sname LIKE '__樱' 

1.4 排序(ORDER BY)

参考SQL

#根据学生年龄从大到小进行排序学生信息
SELECT * FROM student ORDER BY age desc#根据学生年龄从小到大进行排序'男'同学信息
SELECT *FROM student where sex = '男' ORDER BY age#第一排序根据学生年龄升序进行排序,第二排序根据‘学号’降序排序的同学信息
SELECT * FROM student ORDER BY age,sno desc 

1.5 分组与having子句

参考SQL

#分组一般和聚合函数一起使用
#根据性别进行分组,并分别统计各组的人数
SELECT sex,COUNT(*) AS 人数 from student GROUP BY sex #根据性别进行分组,并分别统计各组的同学的平均年龄
SELECT sex,avg(age) AS 平均年龄 from student GROUP BY sex #HAVING子句 一般是配合GROUP BY使用
#根据性别进行分组,并统计各组的人数大于3人的分组信息
SELECT sex,COUNT(*) AS sexGroup from student GROUP BY sex HAVING sexGroup > 3#MYSQL中 HAVING子句可以单独使用 相当于where
SELECT * FROM student HAVING age = 21#MYSQL中 HAVING子句也可以和where使用,但是要放在最后
SELECT * FROM student where age = 21 HAVING sex = '男'

1.6 限制显示条数-limit

参考SQL

#显示学生表信息的前3条
SELECT * FROM student LIMIT 0,3#显示学生表信息的2-4条
SELECT * FROM student LIMIT 1,3#显示年龄第2大和第3大的"男"学生
SELECT * FROM student where sex = '男' ORDER BY age LIMIT 1,2

2 比较逻辑运算

参考SQL

#查询年龄大于20岁小于23岁的男生
SELECT * FROM student WHERE age > 20 and age < 23 and sex = '男' #区间的另一种写法 BETWEEN 大于等于20岁小于等于23岁(BETWEEN)
SELECT * FROM student WHERE age BETWEEN 20 and 23 #查询性别是男,或者年龄大于等于21岁的学生(or)
SELECT * FROM student where sex  = '男' or age >= 21#查询地址为''的学生信息
SELECT * FROM student where address = ''#查询地址为null的学生信息(IS NULL)
SELECT * FROM student where address IS NULL#查询年龄不是21岁的学生(!= 或者 <>)
SELECT * FROM student where age != 21
SELECT * FROM student where age <> 21#查询地址不为null的学生信息(IS NOT NULL)
SELECT * FROM student where address IS NOT NULL

3 多表连接

3.1 内连接(sb INSERT JOIN sb ON sth)

参考SQL

#显示拥有系别学生学号,姓名,及所在系名称-[内连接方式](sb INSERT JOIN sb ON sth)
SELECT s.sno,s.sname,d.dname FROM student s INNER JOIN dept d on s.did = d.did
SELECT s.sno,s.sname,d.dname FROM student s JOIN dept d on s.did = d.did#不推荐写法
SELECT s.*,d.dname FROM student s,dept d WHERE s.did = d.did

3.2 左连接(以左边的表为主)

参考代码

#显示所有学生信息,及所在系情况-[左连接/左外连接]
SELECT s.sno,s.sname,d.dname FROM student s LEFT JOIN dept d on s.did = d.did
SELECT s.sno,s.sname,d.dname FROM student s LEFT OUTER JOIN dept d on s.did = d.did#左连接已左边的表为主
SELECT d.*,s.* FROM dept d LEFT JOIN student s ON s.did = d.did

3.3 右连接(以右边的表为主)

参考代码

#右连接/右外连接
SELECT s.sno,s.sname,d.dname FROM student s RIGHT JOIN dept d on s.did = d.did
SELECT s.sno,s.sname,d.dname FROM student s RIGHT OUTER JOIN dept d on s.did = d.did

3.4 全连接

MYSQL不支持FULL JOIN

SELECT d.*,s.* FROM dept d LEFT JOIN student s ON s.did = d.did
UNION
SELECT d.*,s.* FROM dept d RIGHT JOIN student s ON s.did = d.did

3.5 综合案例

#查询已选课学生姓名,课程名称,课程成绩
SELECT s.sname,c.cname,sc.degree FROM sc
INNER JOIN student s ON sc.sno = s.sno
INNER JOIN course c ON sc.cno = c.cno#查询至少选修一门课的女同学姓名,除去重复姓名项
SELECT DISTINCT s.sname FROM sc INNER JOIN student s ON sc.sno = s.sno
where s.sex = '女' 

4 子查询

4.1 =

SQL代码

#查询和'陈樱'同龄的学生信息
SELECT * FROM student where age = (
SELECT age FROM student where sname = '陈樱'
)

4.2 in/not in

SQL代码

#查询课程成绩不及格的选修课课程信息(多条数据)
SELECT * FROM course WHERE cno in (
SELECT DISTINCT cno FROM sc where degree < 60
)#查询课程成绩及格的选修课课程信息
SELECT * FROM course WHERE cno  NOT IN (
SELECT DISTINCT cno FROM sc where degree < 60
)#in或者not in一般来说查询效率低,采用多表连接
SELECT c.* FROM sc JOIN course c ON sc.cno = c.cno
WHERE sc.degree < 60

4.3 all

SQL代码

#ALL表示必须满足子查询结果的所有记录
#查询sc表里成绩最高的记录
SELECT * FROM sc WHERE degree >= ALL(SELECT degree FROM sc)#查询sc表里成绩最低的记录
SELECT * FROM sc WHERE degree <= ALL(SELECT degree FROM sc)

4.4 any

SQL代码

#any表示满足子查询结果的任意一条记录即可,和some一样
#查询选择’C01‘课程的成绩高于’C02‘的成绩的学生的学号
SELECT sc.sno FROM sc WHERE cno = 'C01' AND degree > ANY(
SELECT degree FROM sc where cno = 'C02'
)

4.5 exist/not exists

SQL代码

#EXISTS子查询返回结果类型bool
#EXISTS运算符的含义为"存在",
#使用 EXISTS 关键字引入一个子查询时,就相当于进行一次存在测试。
#外部查询的 WHERE 子句测试子查询返回的行是否存在。
#子查询实际上不产生任何数据;它只返回 TRUE 或 FALSE 值#显示已经选修了课程的学生信息
#SELECT DISTINCT s.* FROM sc LEFT JOIN student s ON sc.sno = s.sno
SELECT * FROM student s WHERE EXISTS (SELECT * FROM sc where s.sno = sc.sno)#查询选修了C03课程的学生信息
#SELECT DISTINCT s.*,sc.cno FROM sc JOIN student s ON sc.sno = s.sno and sc.cno = 'C03'
SELECT * FROM student s WHERE EXISTS (SELECT * FROM sc WHERE s.sno = sc.sno AND sc.cno = 'C03')

sql脚本


/*
SQLyog Professional v12.09 (64 bit)
MySQL - 5.6.40-log : Database - studentsys
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`studentsys` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `studentsys`;/*Table structure for table `course` */DROP TABLE IF EXISTS `course`;CREATE TABLE `course` (`cno` varchar(10) NOT NULL,`cname` varchar(20) NOT NULL,`credit` int(2) DEFAULT NULL,PRIMARY KEY (`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `course` */insert  into `course`(`cno`,`cname`,`credit`) values ('C01','网页基础',1),('C02','数据库系统',2),('C03','计算机基础',3);/*Table structure for table `dept` */DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` (`did` int(11) NOT NULL AUTO_INCREMENT,`dname` varchar(20) NOT NULL,PRIMARY KEY (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;/*Data for the table `dept` */insert  into `dept`(`did`,`dname`) values (1,'计算机系'),(2,'土木工程系'),(3,'英语系');/*Table structure for table `sc` */DROP TABLE IF EXISTS `sc`;CREATE TABLE `sc` (`sno` varchar(10) DEFAULT NULL,`cno` varchar(10) DEFAULT NULL,`degree` int(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `sc` */insert  into `sc`(`sno`,`cno`,`degree`) values ('S01','C01',80),('S01','C02',85),('S01','C03',90),('S02','C01',63),('S02','C02',58),('S03','C01',55),('S03','C03',65),('S04','C01',58);/*Table structure for table `student` */DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (`sno` varchar(10) NOT NULL,`sname` varchar(20) NOT NULL,`sex` char(4) DEFAULT NULL,`age` int(11) DEFAULT NULL,`brithday` datetime DEFAULT NULL,`address` varchar(200) DEFAULT NULL,`did` int(11) DEFAULT NULL,PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `student` */insert  into `student`(`sno`,`sname`,`sex`,`age`,`brithday`,`address`,`did`) values ('S01','陈宇乐','男',21,'2022-02-02 00:00:00','浙江义乌',1),('S02','陈紫樱','女',20,'2022-02-10 00:00:00','',1),('S03','杜陈宇','男',21,NULL,NULL,1),('S04','陈宇乐','男',23,NULL,NULL,2),('S05','陈樱','女',21,NULL,NULL,2),('S06','杜佳佳','男',19,NULL,NULL,NULL);/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

DQL数据库查询操作(入门)相关推荐

  1. JDBC数据库查询操作

    以下是按正常的数据库查询操作(没有做优化),代码如下: package com.test.main;import java.sql.Connection; import java.sql.Result ...

  2. Django从理论到实战(part31)--Django数据库查询操作

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: Django数据库查询操作 查找是数据库操作中一个非常重要的技术,查询一般就是使用filter.exclude以及get三个 ...

  3. DQL:数据库查询语句

    目录 ​ 一.常用DQL语句:数据库查询语句 1.最基本的通用查询:查询全表数据 2.查询指定列 3.通过起别名进行查询 1)对列起别名 AS可以省略 ​2)对表起别名(表的名字比较长),同时给列起别 ...

  4. DQL是什么?DQL数据查询操作演示全流程

    DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录.查询关键字: SELECT 在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当 ...

  5. python爬虫 django搜索修改更新数据_一文搞懂Django数据库查询操作

    本文略长,读完约需十分钟.当做复习笔记效果更佳. 查询操作: 数据查询是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时 ...

  6. c 编程 mysql结果集_使用mysql C语言API编写程序—MYSQL数据库查询操作(执行查询操作,获取查询结果的字段数,记录行数,...

    //MYSQL_RES保存查询结构 MYSQL_RES* result_ = NULL; int error_code = 0; //保存错误码 char error_info[1024] = '\0 ...

  7. c语言 mysql 查询数字_使用mysql C语言API编写程序—MYSQL数据库查询操作

    //MYSQL_RES保存查询结构 MYSQL_RES* result_ = NULL; int error_code = 0;//保存错误码 char error_info[1024] = '\0' ...

  8. php yii框架addselect,PHP Yii框架之数据库查询操作总结

    Yii容易学习和使用.你只需要知道PHP和面向对象编程,便可以很快上手,而不必事先去学习一种新的架构或者模板语言.用Yii的开发速度非常之快,除框架本身之外,需要为应用所写的编码极少.事实上这是最高效 ...

  9. mysql查询返回xml格式_MySQL数据库查询操作XML的经验分享

    mysql里面有内置的操作xml的函数.分别是ExtractValue()和UpdateXML()函数. 语法:1EXTRACTVALUE (fiedname, XPathstring); 第一个参数 ...

最新文章

  1. 吉他谱——再回首pic
  2. Swift 对象内存模型探究(一)
  3. Python编程基础:第二十五节 args参数*args
  4. springboot工程打包时将application.properties放在jar包外
  5. android ble 调试工具,分享一个蓝牙BLE调试小程序LightBlue
  6. Sequelize Unknown column 'createdAt' in 'field list'?
  7. ELK收集docker日志
  8. python GIL 全局锁
  9. m6000查看端口状态_M6000日常查看维护命令.doc
  10. AlphaGo算法框架解读
  11. access查询出生年月大于_查询条件示例
  12. 让Win7系统屏幕来个大翻转
  13. 淘宝模板开发系列之DOM、CSS规范
  14. python kite 云盘下载
  15. 第三届“传智杯”全国大学生IT技能大赛(初赛B组)题解合集
  16. 基于高通量表型的QTL定位揭示了甘蓝型油菜耐盐胁迫的遗传结构
  17. ug安装lmtools显示未连接服务器,服务器(LMTOOLS)设置教程
  18. 《“桥板灯”的来历》——游城“明经胡氏”
  19. 从老板的裤裆拉链看 Google 管理之道
  20. 宋晓丽20190912-2 命令行

热门文章

  1. 谷歌浏览器在PC端登录抖音官网时,登录页面不显示二维码的解决方法
  2. html炫酷边框样式,利用SVG和CSS3来实现一个炫酷的边框动画
  3. C# CopyTo 用法介绍
  4. 农村有哪些有前景又稳妥的小本创业项目?
  5. IPOLLO简介 非诚勿扰
  6. 2018-2019-2 《网络对抗技术》Exp5 msf 20165222
  7. macd的python代码同花顺_同花顺资金版MACD(源码 副图 贴图)(图文)
  8. Java~~静态代码块
  9. idea全局搜索快捷鍵失效与系统输入法、搜狗输入法冲突有关系
  10. MD5加密(可用作做密码进行加密,不可逆)