DQL_数据查询语言
DQL
select * from student; -- 所有列 大小写不区分-关键字、列名、表名select * from course;select stuNo, name, sex, address from student;--用户友善的列标题 列名 as "列标题"select stuNo as "学号", name as 姓名, sex 性别, address "地 址" from student;insert into student values('S9008', '张溜溜', null, null, null, null, null, 'M0001', null, '无锡');-- 查询学生来自于哪些城市-- 出现数据重复 查询非重复数据 distinctselect distinct city from student;--select distinct city, address from student; -- 多列组成行数据不同
-- 查询徐州学生select * from student where city = '徐州'-- 逻辑运算符 and or notselect * from student where not city = '徐州' -- city != '徐州'select * from student where city = '徐州' or city = '无锡'-- 比较运算符-- 徐州 考试分数及格学生select * from student where city = '徐州' and javasescore >= 60 and sex = '女'-- 不及格学生select * from student where javasescore < 60select * from users where userName = 'admin' -- 判断用户名是否存在select password from users where userName = 'admin' -- 用户查找密码 - 输入密码比较--select * from users where userName = 'admin' and password = 'admin'-- 查询商品select * from product where kind = '电子' and skind = '手机' and brand = '手机'and size >= 4.7 and price >= 2000 and price <= 3000 andstyle = '4G'-- 其它运算符 between..and.. in(100,200,300)select * from student where javasescore >= 98 and javasescore <= 100select * from student where javasescore between 98 and 100; -- >= <=select * from student where city = '徐州' or city = '无锡'select * from student where city in('徐州', '无锡', '淮北', '南京') -- or-- 算术运算符-- S0001学生参与活动 考试成绩 + 20select stuNo, name, javasescore + 20 as score from student where stuNo = 'S0001';select pname, pprice * 0.5 from product;select empNo, empName, (salary * 0.2 + salary) as newSalary from employee;-- 并置运算符 || - String +select '学号: '||stuNo || ' 姓名: ' ||name || ' 城市: ' || city as stuInfo from student;-- SQL日期默认结构 10-10月-00 2000-10-10select * from student where birthdate = '10-10月-00'; -- to_date to_char
select * from student where address like '%无锡%' -- 无锡% %无锡 %无%锡%select * from student where address like '无锡%'select * from student where address like '%无锡%18号%'select * from school where schoolname like '中国%大学'select * from school where schoolname like '中国__大学'-- 信息中包含 % _ 转义select * from student where address like '%\_%' escape '\'select * from student where address like '%\%%' escape '\'
-- 未参与考试学1生select * from student where javasescore is null;select * from student where cardNo is not null;
-- 参与考试学生成绩 从上之下排序select stuno, name, javasescore from studentwhere javasescore is not null and javasescore >= 60order by javasescore, stuno desc; -- javasescore升序 相同按stuNo降序排序
多链表查询
- 等值连接:连接条件是等值唯一的 可以确定的(例:两个表之间的外键、主键之间一一对应相等......) ----通常使用 = 符号连接
- 非等值连接 : 连接条件是一个区间范围 ---- 通常使用 between ...and.... 和 比较符号(< >=)来连接
- 外连接 : 当我们等值连接,某端数据多出后(例:要查学生和学生证的信息,但是如果有的学生没有学生证,则输出不了该学生的信息) ---- 通常使用 在等值连接语句的一边加上 (+) 注意:不可以两边都加(+) 【ps:使用规律 :我们给等值语句的两边中少的一方添加该关键符号,比如上例中 没有学生证的学生是多出来的一方,就需要给学生证后面加上关键符号】 或者 使用 join on语句时,在join的前面加上 left || right || full【ps:使用规律 :当使用right或left时 我们要使其方向指向数据多出的一段,上例中应指向student】
- 自连接 : 表中列引用自身作为外键FK
- 自然连接:把列名相同作为公共条件 关键字 from [table1] nature join [table2] (相同列的列名)
- 交叉连接 : 无条件 笛卡尔积 关键字 from [table1] cross join [table2]
代码:
EQUIJOIN(等值联接) -- FK
select s.stuno, s.name, m.majorname
from student s, major m -- 笛卡尔积 行*行
where s.majorNo = m.majorNo and s.stuno = 'S0001';
-- join tableName on 公共条件
select s.stuno, s.name, m.majorname
from student s join major m
on s.majorno = m.majorno
--and s.stuno = 'S0001';
where s.stuno = 'S0001';
-- 中国大学 有哪些学生
select s.schoolname, f.fname, m.majorname, st.stuno, st.name
from school s, student st, faculty f, major m
where s.schoolName = '中国大学' and
s.schoolcode = f.schoolcode and
f.facultyno = m.facultyno and
m.majorno = st.majorno;
select s.schoolname, f.fname, m.majorname, st.stuno, st.name
from school s join faculty f on s.schoolcode = f.schoolcode
join major m on f.facultyno = m.facultyno
join student st on m.majorno = st.majorno
where s.schoolname = '中国大学';
-- 学生选择哪些课程
NONEQUIJOIN(非等值联接) -- 范围
select s.stuno, s.name, s.score, g.gradename, g.money
from student s, grade g
where s.score between g.minScore and g.maxScore
and s.javasescore >= 60;
--考试成绩评级
OUTER JOIN (外联接) -- 等值联接 某端数据多出
-- 所有学生及其学生证信息
select *
from student s, studentcard c
--where s.cardno = c.cardno -- 值与值存在相同
where s.cardno = c.cardno(+);
select *
from studentcard s right join student c -- left|right|full [outer] join tableName on ..
on s.cardno = c.cardno;
-- 查看所有学生及其学生会小组信息 学生未参与学生会小组
select *
from student s, studentunion n
where s.unionno = n.unionno(+);
-- 查看所有学会会小组信息 及其参与学生信息
select *
from student s, studentunion n
where s.unionno(+) = n.unionno;
-- 查询学校 所有学生会小组 所有学生的信息
select *
from student s, studentunion n
where s.unionno = n.unionno(+)
union
select *
from student s, studentunion n
where s.unionno(+) = n.unionno;
select *
from student s full join studentunion n
on s.unionno = n.unionno;
-- BBS 帖子Post 回复Reply 查询所有帖子及其回复的信息
SELF JOIN (自联接) -- 表中列引用自身列作为FK
select s.stuNo, s.name, t.name
from student s, student t
where t.stuno = s.monitorNo;
NATURAL JOIN (自然联接) -- 把列名相同作为公共条件
select *
from student s NATURAL join major m;
select *
from student s join major m using(majorNo); -- on s.majorNo = m.majorNo
CROSS JOIN (交叉联接) -- 无条件 笛卡尔积
select *
from student CROSS join major;
EQUIJOIN(等值联接) -- FKselect s.stuno, s.name, m.majornamefrom student s, major m -- 笛卡尔积 行*行where s.majorNo = m.majorNo and s.stuno = 'S0001';-- join tableName on 公共条件select s.stuno, s.name, m.majornamefrom student s join major mon s.majorno = m.majorno--and s.stuno = 'S0001';where s.stuno = 'S0001';-- 中国大学 有哪些学生select s.schoolname, f.fname, m.majorname, st.stuno, st.namefrom school s, student st, faculty f, major mwhere s.schoolName = '中国大学' ands.schoolcode = f.schoolcode andf.facultyno = m.facultyno andm.majorno = st.majorno;select s.schoolname, f.fname, m.majorname, st.stuno, st.namefrom school s join faculty f on s.schoolcode = f.schoolcodejoin major m on f.facultyno = m.facultynojoin student st on m.majorno = st.majornowhere s.schoolname = '中国大学';-- 学生选择哪些课程NONEQUIJOIN(非等值联接) -- 范围select s.stuno, s.name, s.score, g.gradename, g.moneyfrom student s, grade gwhere s.score between g.minScore and g.maxScoreand s.javasescore >= 60;--考试成绩评级OUTER JOIN (外联接) -- 等值联接 某端数据多出-- 所有学生及其学生证信息select *from student s, studentcard c--where s.cardno = c.cardno -- 值与值存在相同where s.cardno = c.cardno(+);select *from studentcard s right join student c -- left|right|full [outer] join tableName on ..on s.cardno = c.cardno;-- 查看所有学生及其学生会小组信息 学生未参与学生会小组select *from student s, studentunion nwhere s.unionno = n.unionno(+);-- 查看所有学会会小组信息 及其参与学生信息select *from student s, studentunion nwhere s.unionno(+) = n.unionno;-- 查询学校 所有学生会小组 所有学生的信息select *from student s, studentunion nwhere s.unionno = n.unionno(+)unionselect *from student s, studentunion nwhere s.unionno(+) = n.unionno;select *from student s full join studentunion non s.unionno = n.unionno;-- BBS 帖子Post 回复Reply 查询所有帖子及其回复的信息SELF JOIN (自联接) -- 表中列引用自身列作为FKselect s.stuNo, s.name, t.namefrom student s, student twhere t.stuno = s.monitorNo;NATURAL JOIN (自然联接) -- 把列名相同作为公共条件select *from student s NATURAL join major m;select *from student s join major m using(majorNo); -- on s.majorNo = m.majorNoCROSS JOIN (交叉联接) -- 无条件 笛卡尔积select *from student CROSS join major;
- 单行子查询 单行子查询 一般使用 = 号
- 多行子查询 多行子查询 一般使用 in (1. 因为子查询结果可能有多个 若使用=号 会因为返回结果多,而报错,使用in 会返回所有结果 2.若比较范围是number类型的值 那么需要使用>any <any >all <all)其中>any 是指大于子查询结果中的任意一个值,等价于最小值 >all指的是大于子查询结果中的所有值,等价于大于最大值。
【ANY】
“比任意一个销售员工资低”==“比最高销售员工资低”;
“比任意一个销售员工资高”==“比最低销售员工资高”;
【ALL】
“比所有销售员工资都低”==“比最低销售员工资低”;
“比所有销售员工资都高”==“比最高销售员工资高”;
--单行子查询 条件 PK UK-- 学校名 中国三美大学 - 学校有哪些院系select s.schoolName, f.fnamefrom school s, faculty fwhere s.schoolCode = f.schoolCodeand s.schoolname = '中国三美大学';-- 给出条件不可直接作为条件操作 - 可通过给定条件查询出所需条件-- 比较运算符 子查询结果必须为单行select f.facultyNo, f.fname -- 院系编号、名称from faculty fwhere f.schoolcode = (select schoolCode from schoolwhere schoolName = '中国三美大学'); -- 子查询 (子查询) 右边-- 中国大学 新开院系 艺术系insert into faculty values('05', '艺术系',(select schoolCode from school where schoolname = '中国大学'));-- 往 体育新闻 增加新新闻稿-- 查看 体育新闻 中新闻稿-- 把市场部员工工资 + 500-- 中国大学 已新开院系 艺术系 加入美声音乐专业insert into major values('M8899', '美声音乐',(select facultyno from faculty where fname = '艺术系'and schoolcode =(select schoolcode from schoolwhere schoolname = '中国大学')));-- BBS 查看Java学习模块 某用户 发的帖子-- 多行子查询-- 不可使用 比较运算符-- 多行运算符in =any-- 报考大学 若有 艺术系 优先考虑select s.schoolcode, s.schoolnamefrom school swhere s.schoolcode in (select schoolCode from facultywhere fname = '艺术系');>any <any -- 数字>all <all-- 查询学生中分数比张三三学生低的学生select s.stuNo, s.name, s.javasescorefrom student swhere s.javasescore <all (select javasescore from studentwhere name = '张三三');
-- rownum 必须从第一条件开始select rownum, stuNo, name, score from student where rownum <= 3; -- 获取数据库表中前三条数据-- 成绩前三名select *from (select stuNo, name, score from student order by score desc) -- 虚拟临时表 内联视图where rownum <= 3;
-- 查询学生及其专业 数据 每个页面显示2条数据select stuNo, name, score, majorNamefrom (select rownum as num, s.stuNo, s.name, s.score, m.name as majorNamefrom student s, major mwhere s.majorno = m.majorno)where num >= 1 and num <= 5;-- mysql select ... limit 1, 5;-- 查询学生及其专业 数据 按学生成绩降序排序 每个页面显示2条数据select stuNo, name, score, majorNamefrom (select rownum as num, stuNo, name, score, majorNamefrom (select s.stuNo, s.name, s.score, m.name as majorNamefrom student s, major mwhere s.majorno = m.majornoorder by s.score desc))where num >= 4 and num <= 6;
- 关键词 count(*)或者count(指定的属性)
- group by 后面列出所有的单行函数
- 关键词 avg() 算出平均值
- 在group by 语句完成后 可以跟having avg(.....)来取指定范围的平均值的数据
-- 查看 学校中 每个专业信息 学生数select m.majorno, m.name, count(*), avg(s.javaseScore) as avgScore -- 单行、多行函数结合 必须使用group byfrom major m, student swhere m.majorno = s.majornogroup by m.name, m.majorno -- select中单行函数必须在group by中出现--order by m.majorno desc -- group by中单行函数可不在select中having avg(s.javaseScore) < 80 -- 对分完组数据 条件操作 having 平均分不及格order by avgScore--order by avg(s.javaseScore) desc-- 学生 项目组-- 查看每组学习情况 平均分降序-- 对平均分不及格-- 查看公司每个部门 有几个员工 部门平均工资select d.deptName, d.deptTel, count(*), avg(salary)from department d, employee ewhere d.departmentCode = e.deparmentCodegroup by d.deptName, d.deptTel;-- 京东 哪些种类的商品 销售量较好-- kind kindNO kindName-- product proNo proName price info storeNum salesNum kindNoselect k.kindNo, k.kindName, sum(salesNum)from kind k, product pwhere k.kindNo = p.kindNogroup by k.kindName, k.kindNoorder by sum(salesNum) desc;
DQL_数据查询语言的更多相关文章
- 数据查询语言DQL 与 内置函数(聚合函数)
数据查询语言DQL 从表中获取符合条件的数据 select select*from表的名字 查询表所有的数据.(select跟from必须一块用 成对出现的) * 表示所有字段,可以换成想要查询的 ...
- 学习资料 数据查询语言DQL
数据查询语言DQL介绍及其应用: 查询是SQL语言的核心,SQL语言只提供唯一一个用于数据库查询的语句,即SELECT语句.用于表达SQL查询的SELECT语句是功能最强也是最复杂的SQL语句,它提供 ...
- SQL 复习二(数据查询语言)
1.1 数据查询语言 DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端. 语法: SELECT selection_list /*要查询的列名称*/ FR ...
- MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)
五.数据查询语言(DQL) (重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...
- 微软亚洲研究院开源图数据查询语言LIKQ
近日,微软亚洲研究院通过GitHub 平台开源图数据查询语言LIKQ (Language-Integrated Knowledge Query).LIKQ是基于分布式大规模图数据处理引擎Graph ...
- MySQL之数据查询语言(DQL)
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块: SELECT <字段> FROM <表名> WHERE <查询条件> - ...
- mysql数据查询语言DQL
DB(database)数据库:存储数据的'仓库',保存了一系列有组织的数据 DBMS(Database Management System)数据库管理系统:用于创建或管理DB SQL(Structu ...
- MySQL — 数据查询语言
目录 1.基础查询 2.条件查询 3.分组查询 4.排序查询 5.分页查询 6.多表查询 6.1.连接查询 6.1.1.内连接 6.1.2.外连接 6.1.3.自连接 6.1.4.联合查询 6.2.子 ...
- 八:SQL之DQL数据查询语言单表操作
前言: DQL数据库查询语言是我们在开发中最常使用的SQL,这一章总结了单表操作部分的常用查询方式 主要操作有:查询所有字段.查询指定字段.查询指定记录.带IN的关键字查询,范围查询,陪查询.查询空值 ...
随机推荐
- 【ZZ】一张图清晰追溯数据库的发展历程(1962-2016年)
http://www.cbdio.com/BigData/2016-02/24/content_4651751.htm 历史发展概述
- 20种常用的DOS命令小结
先介绍一下通配符的概念. 通配符*和? *表示一个字符串 ?只代表一个字符 注意通配符只能通配文件名或扩展名,不能全都表示.例如我们要查找以字母y开头的所有文件,可以输入以下命令:dir y*.*:如 ...
- 我cnblogs的主题
我的cnblogs主题 这里记录的是本博客的主题存档 主题代码参考自:流云诸葛的博客 博客皮肤选择 选择 LessIsMore 页面定制CSS代码 div.post div.entry { font- ...
- 小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描
端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相 ...
- JS获取事件源对象
发现问题: 在复杂事件处理过程中,很可能会丢失event事件对象,特别是IE和FireFox两大浏览器,这个时候要捕获事件源就非常困难…… 如果在事件处理过程中,需要不断地传递event事件对象作为参 ...
- 安装openshift客户端工具 rhc
安装ruby: $ sudo apt-get install ruby-full 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 将会安装下列额外的软件包: ...
- [转]T4模版引擎之生成数据库实体类
本文转自:http://www.cnblogs.com/lzrabbit/archive/2012/07/18/2597953.html 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实 ...
- [改善Java代码]由点及面,一叶知秋----集合大家族
Java中的集合类实在是太丰富了,有常用的ArrayList.HashMap,也有不常用的Stack. Queue,有线程安全的Vector.HashTable,也有线程不安全的LinkedList. ...
- hdu 1059 多重背包 背包指数分块
思路: 这个方法要看<浅谈几类背包问题>这篇论文. #include"stdio.h" #define Max(a,b) (a)>(b)?(a):(b) ],k[ ...
- 【hdu2896】病毒侵袭
题目描述 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~但网路上总有那么些 ...