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, '无锡');
-- 查询学生来自于哪些城市
-- 出现数据重复 查询非重复数据 distinct
select distinct city from student;
--select distinct city, address from student; -- 多列组成行数据不同
-- 查询徐州学生
select * from student where city = '徐州'
-- 逻辑运算符 and or not
select * 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 < 60
select * 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 and
style = '4G'
-- 其它运算符 between..and.. in(100,200,300)
select * from student where javasescore >= 98 and javasescore <= 100
select * from student where javasescore between 98 and 100; -- >= <=
select * from student where city = '徐州' or city = '无锡'
select * from student where city in('徐州', '无锡', '淮北', '南京') -- or
-- 算术运算符
-- S0001学生参与活动 考试成绩 + 20
select 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-10
select * 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 student
where javasescore is not null and javasescore >= 60
order 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(等值联接) -- 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;
- 单行子查询 单行子查询 一般使用 = 号
- 多行子查询 多行子查询 一般使用 in (1. 因为子查询结果可能有多个 若使用=号 会因为返回结果多,而报错,使用in 会返回所有结果 2.若比较范围是number类型的值 那么需要使用>any <any >all <all)其中>any 是指大于子查询结果中的任意一个值,等价于最小值 >all指的是大于子查询结果中的所有值,等价于大于最大值。
【ANY】
“比任意一个销售员工资低”==“比最高销售员工资低”;
“比任意一个销售员工资高”==“比最低销售员工资高”;
【ALL】
“比所有销售员工资都低”==“比最低销售员工资低”;
“比所有销售员工资都高”==“比最高销售员工资高”;
--单行子查询 条件 PK UK
-- 学校名 中国三美大学 - 学校有哪些院系
select s.schoolName, f.fname
from school s, faculty f
where s.schoolCode = f.schoolCode
and s.schoolname = '中国三美大学';
-- 给出条件不可直接作为条件操作 - 可通过给定条件查询出所需条件
-- 比较运算符 子查询结果必须为单行
select f.facultyNo, f.fname -- 院系编号、名称
from faculty f
where f.schoolcode = (select schoolCode from school
where 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 school
where schoolname = '中国大学')));
-- BBS 查看Java学习模块 某用户 发的帖子
-- 多行子查询
-- 不可使用 比较运算符
-- 多行运算符
in =any
-- 报考大学 若有 艺术系 优先考虑
select s.schoolcode, s.schoolname
from school s
where s.schoolcode in (select schoolCode from faculty
where fname = '艺术系');
>any <any -- 数字
>all <all
-- 查询学生中分数比张三三学生低的学生
select s.stuNo, s.name, s.javasescore
from student s
where s.javasescore <all (select javasescore from student
where 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, majorName
from (select rownum as num, s.stuNo, s.name, s.score, m.name as majorName
from student s, major m
where s.majorno = m.majorno)
where num >= 1 and num <= 5;
-- mysql select ... limit 1, 5;
-- 查询学生及其专业 数据 按学生成绩降序排序 每个页面显示2条数据
select stuNo, name, score, majorName
from (select rownum as num, stuNo, name, score, majorName
from (select s.stuNo, s.name, s.score, m.name as majorName
from student s, major m
where s.majorno = m.majorno
order 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 by
from major m, student s
where m.majorno = s.majorno
group 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 e
where d.departmentCode = e.deparmentCode
group by d.deptName, d.deptTel;
-- 京东 哪些种类的商品 销售量较好
-- kind kindNO kindName
-- product proNo proName price info storeNum salesNum kindNo
select k.kindNo, k.kindName, sum(salesNum)
from kind k, product p
where k.kindNo = p.kindNo
group by k.kindName, k.kindNo
order 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的关键字查询,范围查询,陪查询.查询空值 ...
随机推荐
- oc-01
//#ifndef __OCDay01__aa__ //#define __OCDay01__aa__ //这2行是预编译指令,防止include的时候重复包含操作(a包含b,b又包含了a) #inc ...
- SVN 冲突文件快速解决方法
精简的美丽...... 现在几乎没有几个写代码的人不用snv来存储代码了吧! 但是,在实际操作中,多人对同一文件读写造成冲突是时有发生的事.这个时候解决的方法就是打开文件找出冲突的地方.如果冲突的部分 ...
- Helpers\RainCaptcha
Helpers\RainCaptcha This class can validate CAPTCHA images with RainCaptcha. It can generate an URL ...
- Android WebView的使用方法总结
本文主要讲解WebView的一些常用使用方法 代码如下: xml文件: <LinearLayout xmlns:android="http://schemas.android.com/ ...
- Android进阶笔记12:Manymo(在线安卓系统模拟器工具)
Manymo: 在线安卓系统模拟器工具是一款启动速度快,且在浏览器中就能运行流畅.你可以使用它来测试你的安卓应用,他最多能支持42种屏幕尺寸和系统版本. 长久以来,Android开发者面临的困境之一就 ...
- Android网络请求与解析
1.Volley和Gson结合使用——Volley适用于小型数据,多次的请求,使用Gson解析时,服务器数据的键值不能包含常用的标识符如:class.....等,这些就需要与服务端小伙伴商量 这样也可 ...
- hibernate 入门案例
1,创建工程,导入jar ojdbc14.jar 数据库驱动包,我用的是oracle数据库,根据实际的数据库选择驱动包 创建java类,并利用bibernate插件完成orm映射,创建hbm.xml ...
- zlib导致Ubuntu登录管理器失效
ubuntu版本:10.04 现象:开机之后无法启动登录管理器. 原因:zlib与登录管理器冲突. 解决:卸载zlib.
- sublime安装 less环境
工具的选择: mac-codekit simpless->跨平台 winless-windows less.js下载:http://pan.baidu.com/s/1o60yTZ0 安装L ...
- Nginx - Configuration File Syntax
Configuration Directives The Nginx configuration file can be described as a list of directives organ ...