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的关键字查询,范围查询,陪查询.查询空值 ...
随机推荐
- 合并js文件minify实例
将min目录放入项目中后,js中引入方式是: <script type="text/javascript" src="__PUBLIC__/min/?b=publi ...
- mac 功能修改。。。。
个人表示 Mac 下的 Spotlight 搜索功能确实是个鸡肋,安装 QuickSilver 才是王道!所以我个人就把 Spotlight 关闭掉了.方法很简单,还是要用到 “终端” 工具. 在 “ ...
- xtrabackup原理0
- 今天分享一个抽奖的类Lottery
/* * Copyright (C) 2014 Jason Fang ( ijasonfang@gmail.com ) * * Licensed under the Apache License, V ...
- Python_爬虫3
正则表达式 在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对 ...
- SVN 修改URL路径
http://strugglelinux.blog.51cto.com/1009905/672008 标签:休闲 SVN 修改URL路径 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...
- iOS系统右滑返回全局控制方案
前言 今天有个小需求,在点击导航条上的返回按钮之前要调用某个API,并弹出UIAlertView来显示,根据用户的选项判断是否是返回还是继续留在当前控制器.举个简单的例子,当点击导航条上的左上角返回按 ...
- Football
Football Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2882 Accepted: 1466 Descript ...
- Google翻译,3个步骤灭绝人类
今儿这事儿得从一个新闻说起:<谷歌又飙车了,刚发布了神经机器翻译系统,没见过的语言它也能翻译> 大家如果懒的看原文,可以直接看我这个简单白话列表: Google又出来嘚瑟了,发布了基于神经 ...
- Org-mode 任务添加提醒
org-mode中的约会日程有提醒功能,这样设置就行: ;; ;;; 提醒 ;; (require 'appt) ;; (appt-activate t);启用约会提醒 ;; (setq appt-d ...