查询语句 DQL 数据查询语言---使用select
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相关推荐
- DQL数据查询语言--select的巧妙用法
DQL数据查询语言–select的巧妙用法 今天是周六,赶着这冬日的太阳,记下生活!记下经验! 巧用SQL的数据查询语句Select可以大大提高查询效率,针对测试开发都非常有用. DQL数据查询语言- ...
- MySQL学习记录 (二) ----- SQL数据查询语句(DQL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- 数据库DQL数据查询语言
文章目录 DQL数据查询语言 1.基础查询:SELECT子句和FROM子句 1.1 语法: 2. WHERE子句 2.1 使用AND"与"和OR"或"来连接多个 ...
- DQL -- 数据查询语言
DQL -- 数据查询语言 查询不会修改数据库表记录! 一. 基本查询 1. 字段(列)控制 1) 查询所有列 SELECT * FROM 表名; SELECT * FROM emp; --> ...
- MySQl数据库————DQL数据查询语言
系列文章目录 文章目录 系列文章目录 前言 一.DQL 一.DQL数据查询语言 二.DQL单表查询 1.基本条件查询 2.多条件查询 3.范围查找 4.集合范围类查找 5.字符串模糊匹配 6.空值查询 ...
- Mysql数据库——DQL数据查询语言
DQL数据查询语言 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 实例 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 案例练习 小结 DQL,数据查询语言,用来查 ...
- MySQL中SQL语句——DQL(数据查询语句)
前言: 首先对于数据库有一定的了解,会对于Mysql的学习有一定的帮助: 数据库主要分为 DB(数据库),DBMS(数据库管理系统),SQL(结构化查询语言,用于和DBMS通信的语言):这篇要讲的DQ ...
- mysql 查询指定字段数据_MySQL使用select语句查询指定表中指定列(字段)的数据
本文介绍mysql数据库中执行select查询语句,查询指定列的数据,即指定字段的数据. 再来回顾一下sql语句中的select语句的语法: select 语句的基本语法: select from w ...
- DQL -- 数据查询语言(查询不会修改数据库表记录)
原文出处:https://blog.csdn.net/jianghao233/article/details/81180944 一. 基本查询 1. 字段(列)控制 1) 查询所有列 SELECT ...
最新文章
- Flask自定义转换器,实现路由匹配正则表达式参数
- 管理软件售前咨询与企业架构
- 菲尔兹奖得主舒尔茨没做到的事,现在被计算机证明了
- oracle创建时分秒列,oracle 11g 分区表创建(年月日周时分秒)
- 广东省二级计算机考试题目,广东省二级计算机考试题及答案
- Pandas数据帧(DataFrame)
- schema中字段类型的定义
- 系统辨识理论及应用_液压系统故障智能诊断方法(2)
- VMware Workstation 14.1.1 精简特别版
- setup factory的命令行打包
- Javaweb面试题整理
- cad完全卸载教程_如何完全卸载(删除)cad-百度经验
- psd文件怎样导出html5,PSD格式的文件怎么转换成CAD格式?
- GOOGLE搜索秘籍--高级搜索:site,link,inurl,allinurl,intitle,allintitle
- proceed with launch?解决办法
- 嵌入式stm32项目开发 心率检测仪的设计与实现
- 数据模型:概念数据模型,逻辑数据模型,物理数据模型
- 视频帧率对人眼主观感受的影响
- Dubbo(六)服务降级
- proxy解决跨域问题
热门文章
- TI DSP TMS320F28335 CCS初级踩坑
- 花荣《至尊狐狸》中国股市精英最优套利战术读书笔记
- PDF编辑之加密的PDF文档如何解除密码和进行编辑
- 强生稳豪倍优型血糖仪试纸_强生稳豪倍优型血糖仪(送50片试纸)
- HTML中br标记和p标记区别,在 HTML 文档中,段落标记
- B.FRIENDit壁虎忍者笔记本支架,铝合金电脑支架,便携折叠、可调节桌面电脑架
- 刘焕勇医学知识图图QASystemOnMedicalKG的构建试错过程
- python相关性矩阵热图_python – 相关热图
- 12 款做Java后台管理系统的项目,超级无敌好用!
- 人工神经网络算法与机器算法是相同的算法吗