sql单表查询、常用函数、多表查询、嵌套查询、相关子查询、传统集合运算的实现

结构化查询语言SQL 关系数据库语言

单表查询
LINESIZE PAGESIZE SHOW SET
SELECT EXTRACT(YEAR FROM SYSDATE) CREENT_YEAR FROM DUAL;
SELECT SNO,EXTRACT(YEAR FROM SYSDATE)-AGE FROM S;
别名可用双引号括起来
SELECT DISTINCT SPEC FROM S;
字符串常量和日期常量用一对单引号括起来
LIKE %代表任意长的字符串 _代表任意单个字符 通配符:% _
ORDER BY ASC升序排序(默认) 含有空值的行位于最后面
DESC降序排序 含有空值的行位于最前面

组函数COUNT() SUM() AVG() MAX() MIN()
SELECT DISTINCT COUNT(DISTINCT SNO) FROM SC;
分组查询:在包含GROUP BY子句的查询语句中,SELECT子句后面的所有字段列表(除组函数外),均应该包含在GROUP BY子句中,即所选项与分组的一致性。
WHERE作用于基本表或视图,从中选择满足条件的元组;
HAVING作用于组,从中选择满足条件的组。

SELECT 投影
FROM 连接
WHERE 选取
GROUP BY 分组
HAVING 去组
ORDER BY 排序

函数
SELECT EXTRACT(YEAR FROM SYSDATE) CREENT_YEAR FROM DUAL;
SELECT SNO,EXTRACT(YEAR FROM SYSDATE)-AGE FROM S;
系统日期SYSDATE
修改会话系统日期格式:ALTER SESSION SET NLS_DATE_FORMAT=‘YYYY-MM-DD HH24:MI:SS’;
获取系统日期 SYSDATE 年月日SELECT TO_CHAR(SYSDATE,‘YYYY’) FROM DUAL;
字符串函数:LOWER() UPPER() SELECT LOWER(‘ANM’) FROM DUAL;
其他函数:NVL(expr1,expr2):如果expr1=null,返回expr2;否则返回expr1

多表查询
无条件连接 笛卡尔乘积
SELECT * FROM S,SC WHERE S.SNO=SC.SNO;
SELECT * FROM S JOIN SC ON S.SNO=SC.SNO;

SELECT SNAME,CNAME,GRADE FROM S,C,SC WHERE S.SNO=SC.SNO AND C.CNO=SC.CNO AND SC.CNO=2 AND (GRADE BETWEEN 70 AND 90);
SELECT SNAME,CNAME,GRADE FROM (S JOIN SC ON S.SNO=SC.SNO) JOIN C ON SC.CNO=C.CNO WHERE SC.CNO=2 AND (GRADE BETWEEN 70 AND 90);
外部连接
SELECT S.SNO,SNAME,SEX,AGE,SPEC,SDEPT,CNO,GRADE FROM S,SC WHERE S.SNO=SC.SNO (+);
SELECT S.SNO,CNO,GRADE FROM S,SC WHERE S.SNO=SC.SNO(+) AND CNO(+)=2;

SELECT S.SNO,SNAME,SEX,AGE,SPEC,SDEPT,CNO,GRADE FROM S FULL OUTER JOIN SC ON S.SNO=SC.SNO AND CNO=2;
SELECT S.SNO,SNAME,SEX,AGE,SPEC,SDEPT,CNO,GRADE FROM S FULL OUTER JOIN SC ON S.SNO=SC.SNO WHERE CNO=2;

嵌套查询
子查询的结果用于建立主查询的查找条件
子查询不能有ORDER BY子句
子查询选出的记录不显示
IN ANY ALL EXISTS
子查询在不同的位置上
a. WHERE子句中
b. FROM后面
c. SELECT后面
相关子查询 (子查询的查询条件用了父查询表中的属性值)
查询次数 由父查询表的行数决定
SELECT SNAME FROM S WHERE EXISTS(SELECT * FROM SC WHERE SNO=S.SNO AND CNO=1);
目标列表达式通常用*,给出列名无实际意义

传统集合运算的实现
并UNION (ALL)自动删除重复元组
交INTERSECT
差EXCEPT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值