1. 准备条件

-- 创建数据库
use mydb;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for student
-- ----------------------------
-- 创建学生表
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生表的主键列',`name` varchar(255) ,`age` int(11) ,`address` varchar(255),PRIMARY KEY (`id`) USING BTREE
) ;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三', 18, '北京');
INSERT INTO `student` VALUES (2, '李四', 19, '北京');
INSERT INTO `student` VALUES (3, '王五', 19, '北京');
INSERT INTO `student` VALUES (4, '钱七', 19, '北京');
INSERT INTO `student` VALUES (5, '关羽', 25, '南京');
INSERT INTO `student` VALUES (6, '张飞', 25, '南京');
INSERT INTO `student` VALUES (7, '赵云', 28, '南京');
INSERT INTO `student` VALUES (8, '项羽', 19, '南京');
INSERT INTO `student` VALUES (9, '刘备', 30, '上海');
INSERT INTO `student` VALUES (10, '曹操', 40, '许昌');
INSERT INTO `student` VALUES (11, '夏侯', 36, '许昌');
INSERT INTO `student` VALUES (12, '诸葛亮', 38, '上海');
INSERT INTO `student` VALUES (13, '周瑜', 78, '江东');
INSERT INTO `student` VALUES (14, '小乔', 56, '江东');
INSERT INTO `student` VALUES (15, '孙尚香', 59, '江东');

1.2 查询的入门

 -- 简单查询 select 查询的列 from 表名
-- 查询表中所有的记录,注意select后跟了* 表示统配,所有的列
-- 实际开发中不建议大家使用*,因为*会导致索引失效。而是把每一个列名一一列出select * from student;select id,name,age,address from student;-- 部分查询
select name,age from student;-- 查询的列表起别名
select name as 姓名, age as 年龄 from student;
-- as可以省略
select name 姓名,age 年龄 from student;-- 范围查询
select * from student where age>=19 and age<=30;-- 使用distinct去除重复字段值,要求查询所有列值,都必须相同
select distinct address from student;

1.3 去除重复的值

-- 使用distinct 去除重复字段值 要求查询的所有列值 都必须相同时select distinct address from student;

1.4 条件查询

上面讲解的查询都是查询所有记录,而在实际开发中我们会根据条件查询符合的记录。

-- 判断
select * from student where age>19;
select * from student where age>=19;
select * from student where age!=19;
select * from student where age<19;-- 多条件查询  and(与) or(或)
select * from student where age>=19 and address='北京';select * from student where age<=19 or address='北京';-- 此时我们有这样需求 查询年龄是 18 或者25 或者30 或者 36 的学生
select * from student where age=18 or age=25 or age=30 or age=36;
-- 上边麻烦我们可以用in的来替换上边的模式
select * from student where age in(18,25,30,36);-- 模糊查询
-- 查询名字中第二字符为一 _
select * from student where name like '__一';-- 查询名字姓张  %统配任意字符
select * from student where name like '张%';select * from student where name like '%一%';

1.5 排序查询

 -- 排序查询  order by 列名 desc:降序  不加 descselect * from student order by age ;-- 根据多列进行排序年龄按照降序  姓名按照升序select * from student order by age desc, id desc;-- 按照年龄进行排序 如果年龄相同  再按照id进行排序

注意: 既有where 又有order by 那么谁在前 谁在后

-- where在前  order by在后。
select * from student where age>19 order by age desc;

例题:

题1.

-- 创建课程表
CREATE TABLE  course (cs_id int(11) NOT NULL COMMENT '课程编号',cs_name varchar(50) NOT NULL COMMENT '课程名称',cs_credit tinyint(255) unsigned DEFAULT NULL COMMENT '课程学分',cs_type char(12) DEFAULT NULL COMMENT '课程类别',cs_depart char(6) DEFAULT NULL COMMENT '院系名称'
);insert into course(cs_id,cs_name,cs_credit,cs_type,cs_depart) values
(5200313,'数据库原理及应用',4,'核心专业','信工'),
(5203314,'计算机导论',4,'通识教育','信工'),
(5219314,'数据结构',5,'专业核心','信工'),
(5223013,'大学物理',4,'专业基础','信工'),
(5227614,'毕业实习',4,'集中实践','信工'),
(5230912,'云计算',2,'共同选修','信工'),
(5236212,'机器学习',2,'共同选修','信工'),
(5237514,'c语言',4,'专业基础','信工'),
(5245112,'区块链',2,'任意选修','信工'),
(7200422,'知识产权法',2,'任意选修','文法'),
(20201833,'概率论',3,'专业基础','基础'),
(20202336,'高等数学',6,'专业基础','基础'),
(29299131,'劳动教育',1,'集中实践','学务');-- 1.查询全部课程的信息
select cs_id,cs_name,cs_credit,cs_type,cs_depart from course;-- 2.查询信工学院开设的课程名、课程号及学分
select cs_name,cs_id,cs_credit from course where cs_depart='信工';-- 3.查询学分超过3学分的课程代码、课程名和开课单位
select cs_id,cs_name,cs_depart from course where cs_credit>3;-- 4.查询学分在2到4之间课程的信息
select * from course where cs_credit>=2 and cs_credit<=4;-- 5.查询课程名称中带“数据”的课程名、课程号及开课单位
select cs_id,cs_name,cs_depart from course where cs_name like '%数据%';-- 6.查询不是信工学院开设的集中实践课的开课单位和课程名称
select cs_name,cs_depart from course where cs_depart!='信工' and cs_type='集中实践';-- 7.查询信工学院开设的课程的类型有哪些
select cs_type from course where cs_depart='信工';

题2:

-- 创建学生表
CREATE TABLE student(stu_id bigint(11) unsigned NOT NULL COMMENT '学号',stu_name char(12) NOT NULL COMMENT '姓名',stu_sex enum('男','女') DEFAULT NULL COMMENT '性别',stu_age tinyint(255) unsigned DEFAULT NULL COMMENT '年龄',stu_major char(9) DEFAULT NULL COMMENT '专业',stu_college char(12) DEFAULT NULL COMMENT '学院'
) insert into student(stu_id,stu_name,stu_sex,stu_age,stu_major,stu_college) values
(201804550101,'郭奎','男',22,'计科','信工学院'),
(201804550102,'吕宇航','男',18,'计科','信工学院'),
(201804550103,'张豪辉','女',19,'计科','信工学院'),
(201804550107,'丁志杰','男',17,'金融学','金贸学院'),
(201804550109,'范伟','男',19,'金融学','金贸学院'),
(201804550116,'张依婷','女',17,'大数据','信工学院'),
(201804550120,'张维','男',19,'计科','信工学院'),
(201804550121,'朱柳阳','女',20,'计科','信工学院'),
(201804550144,'谭兵炎','男',20,'大数据','信工学院'),
(201804550153,'杨志强','男',17,'大数据','信工学院');-- 1.查询计科专业和大数据专业的学生信息
select * from student where stu_major='计科' or stu_major='大数据';-- 2.查询不是信工学院的学生姓名和学号
select stu_id,stu_name from student where stu_college!='信工学院';-- 3.查询年龄是17,18,19的学生姓名和专业
select stu_name,stu_major from student where stu_age in(17,18,19);-- 4.查询信工学院的的专业有哪些
select stu_major from student where stu_college='信工学院';-- 5.查询年龄为空的学生信息
select stu_id,stu_name,stu_sex,stu_age,stu_major,stu_college from student where stu_age=null;-- 6.查询学生的信息,查询结果按姓名升序排序
select * from student order by stu_name;

2. 查询列上进行运算

-- 查询列上进行运算
select age,name from student;select age+3,name from student;select age-3,name from student; select age*3,name from student;

有了这个特性 就可以在设计数据库表的时候 如果有些值可以通过多列运算出来 此时就没有必要设计了

比如: 订单表
订单号   订单的价格  订单的数量  订单的总价
在实际开发中订单的总价可以通过订单的价格*订单的数量计算出来 那么就没有必要再数据库中再定义订单总价这列

create table t_order(orderno int primary key,name varchar(20),price DECIMAL(6,2),num int-- total decimal(6,2) -- 这里没有必要再定义总价因为
)select orderno,name,price,num,price*num total from t_order;

3. 聚合函数

聚合函数总共有5个:
   max(列名):求某列的最大值
   min(列名):求某列的最小值
   sum(列名):求某列的和
   avg(列名):求某列的平均值
   count(列名):求某列的个数

-- 求最大的年龄
select max(age) from t_student;-- 求最小的年龄
select min(age) from t_student;-- 求年龄的和
select sum(age) from t_student;-- 求学生的个数.
select count(id) from t_student;-- 求年龄平局值
select avg(age) from t_student;

4.分组查询

在sql中有个 group by  语句  将某一列相同数据 视为一组 然后进行查询 与聚合函数连用

-- 求各个地区的人数
select count(*),address from t_student group by address;-- 查询 各个地区的平均年龄
select avg(age),address from t_student group by address;-- 可以使用 having 对分组进行条件检索。 -- 查询 平均年龄大于36的地区人数
select address,count(*),avg(age) from t_student group by address having avg(age)>36;-- 查询 最大值小于25 的地区 人数 和 平均年龄
select address,count(*),avg(age),max(age) from t_student group by address having max(age)<25;-- 查询 人数大于3的地区 最大年龄
select address,max(age) from student group by address having count(*)>3;-- 查询每个地区 25岁以上人数的数量
select address,count(*) from t_student where age>25 group by address;

5. 分页查询

当数据库表数据量比较大,内存可能会不够,导致电脑卡死,如果在java中 有可能内存直接溢出 所以实际开发中 都是分页查询 。

-- 分页使用: limit select * from t_student limit 3,5; -- 从第三条记录查询 查询5条记录
select * from t_student limit 0,5; -- 从第0条记录查询  查询5条记录-- 分页:  n:表示查询页码  m:表示每页得条数
select * from 表名 limit (n-1)*m,m;-- -- 查询第n页得m条记录 select * from student limit 0,5;-- 第1页每页显示5条记录
select * from student limit 5,5;-- 第2页每页显示5条记录
select * from student limit 10,5;-- 第3页每页显示5条记录
select * from student limit 15,5;-- 第4页每页显示5条记录
select * from student limit 20,5;-- 第5页每页显示5条记录

6. sql得优先级

sql语法:
   select distinct *  from 表名 
       where 条件
       group by 分组
       having 分组条件
       order by 排序
       limit 分页

上面为他得语法结构,顺序不能乱。

mysql执行引擎:执行得顺序

例题:

-- 创建学生表2
create table student2
(id int(10) primary key,name varchar(20) not null,sex varchar(4),birth year,department varchar(20) not null,address varchar(50)
);
-- 创建成绩表
create table score(id int(10) primary key,stu_id int(10) not null,c_name varchar(20),grade int(102)
);
insert into student2(id,name,sex,birth,department,address)values
(901,'张老大','男',1985,'计算机系','北京市海淀区'),
(902,'张老二','男',1986,'中文系','北京市昌平区'),
(903,'张三','女',1990,'中文系','湖南省永州市'),
(904,'李四','男',1990,'英语系','辽宁省阜新市'),
(905,'王五','女',1991,'英语系','福建省厦门市'),
(906,'王六','男',1988,'计算机系','湖南省衡阳市');insert into score(id,stu_id,c_name,grade)values
(1,901,'英语',80),
(2,902,'计算机',65),
(3,902,'中文',88),
(4,903,'中文',95),
(5,904,'计算机',70),
(6,904,'英语',92),
(7,905,'英语',94),
(8,906,'计算机',90),
(9,901,'计算机',null),
(10,901,'中文',null),
(11,902,'英语',null);-- 1.查询student2表的所有记录
select id,name,sex,birth,department,address from student2 ;-- 2.查询student2表的第2条到4条记录
select * from student2 limit 2,4;-- 3.从student2表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
select id,name,department from student2;-- 4.从student2表中查询计算机系和英语系的学生的信息
select * from student2 where department='计算机系' or department='英语系';-- 5.从student2表中查询每个院系有多少人
select count(*),department  from student2 group by department;-- 6.从score表中查询每个科目的最高分
select c_name,max(grade) from score group by c_name;-- 7.计算每个考试科目的平均成绩
select c_name,avg(grade) from score group by c_name;-- 8.将计算机考试成绩按从高到低进行排序
select * from score where c_name='计算机' order by grade  desc;

查询语句 DQL 数据查询语言---使用select相关推荐

  1. DQL数据查询语言--select的巧妙用法

    DQL数据查询语言–select的巧妙用法 今天是周六,赶着这冬日的太阳,记下生活!记下经验! 巧用SQL的数据查询语句Select可以大大提高查询效率,针对测试开发都非常有用. DQL数据查询语言- ...

  2. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  3. 数据库DQL数据查询语言

    文章目录 DQL数据查询语言 1.基础查询:SELECT子句和FROM子句 1.1 语法: 2. WHERE子句 2.1 使用AND"与"和OR"或"来连接多个 ...

  4. DQL -- 数据查询语言

    DQL -- 数据查询语言 查询不会修改数据库表记录! 一. 基本查询 1. 字段(列)控制 1) 查询所有列 SELECT * FROM 表名; SELECT * FROM emp; --> ...

  5. MySQl数据库————DQL数据查询语言

    系列文章目录 文章目录 系列文章目录 前言 一.DQL 一.DQL数据查询语言 二.DQL单表查询 1.基本条件查询 2.多条件查询 3.范围查找 4.集合范围类查找 5.字符串模糊匹配 6.空值查询 ...

  6. Mysql数据库——DQL数据查询语言

    DQL数据查询语言 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 实例 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 案例练习 小结 DQL,数据查询语言,用来查 ...

  7. MySQL中SQL语句——DQL(数据查询语句)

    前言: 首先对于数据库有一定的了解,会对于Mysql的学习有一定的帮助: 数据库主要分为 DB(数据库),DBMS(数据库管理系统),SQL(结构化查询语言,用于和DBMS通信的语言):这篇要讲的DQ ...

  8. mysql 查询指定字段数据_MySQL使用select语句查询指定表中指定列(字段)的数据

    本文介绍mysql数据库中执行select查询语句,查询指定列的数据,即指定字段的数据. 再来回顾一下sql语句中的select语句的语法: select 语句的基本语法: select from w ...

  9. DQL -- 数据查询语言(查询不会修改数据库表记录)

    原文出处:https://blog.csdn.net/jianghao233/article/details/81180944 一. 基本查询 1. 字段(列)控制 1) 查询所有列  SELECT ...

最新文章

  1. Flask自定义转换器,实现路由匹配正则表达式参数
  2. 管理软件售前咨询与企业架构
  3. 菲尔兹奖得主舒尔茨没做到的事,现在被计算机证明了
  4. oracle创建时分秒列,oracle 11g 分区表创建(年月日周时分秒)
  5. 广东省二级计算机考试题目,广东省二级计算机考试题及答案
  6. Pandas数据帧(DataFrame)
  7. schema中字段类型的定义
  8. 系统辨识理论及应用_液压系统故障智能诊断方法(2)
  9. VMware Workstation 14.1.1 精简特别版
  10. setup factory的命令行打包
  11. Javaweb面试题整理
  12. cad完全卸载教程_如何完全卸载(删除)cad-百度经验
  13. psd文件怎样导出html5,PSD格式的文件怎么转换成CAD格式?
  14. GOOGLE搜索秘籍--高级搜索:site,link,inurl,allinurl,intitle,allintitle
  15. proceed with launch?解决办法
  16. 嵌入式stm32项目开发 心率检测仪的设计与实现
  17. 数据模型:概念数据模型,逻辑数据模型,物理数据模型
  18. 视频帧率对人眼主观感受的影响
  19. Dubbo(六)服务降级
  20. proxy解决跨域问题

热门文章

  1. TI DSP TMS320F28335 CCS初级踩坑
  2. 花荣《至尊狐狸》中国股市精英最优套利战术读书笔记
  3. PDF编辑之加密的PDF文档如何解除密码和进行编辑
  4. 强生稳豪倍优型血糖仪试纸_强生稳豪倍优型血糖仪(送50片试纸)
  5. HTML中br标记和p标记区别,在 HTML 文档中,段落标记
  6. B.FRIENDit壁虎忍者笔记本支架,铝合金电脑支架,便携折叠、可调节桌面电脑架
  7. 刘焕勇医学知识图图QASystemOnMedicalKG的构建试错过程
  8. python相关性矩阵热图_python – 相关热图
  9. 12 款做Java后台管理系统的项目,超级无敌好用!
  10. 人工神经网络算法与机器算法是相同的算法吗