自己学习Oracle的相关笔记,主要备忘,并不详细,如有错误欢迎大家指正~~~
SELECT查询
-
SELECT基础查询
-
基本语法:
SELECT [DISTINCT | ALL] select_list FROM table_list [where_clause] [group_by_clause] [HAVING condition] [order_by_clause]
- SELECT: 查询必备关键字
- -[DISTINCT | ALL]: 查询记录中是否除去重复记录
- select_list: 需要查询的字段列表,一个或多个
- -[where_clause]: WHERE条件查询
- -[group_by_clause]: GROUP BY子句
- -[HAVING condiition]: HAVING子句
- -[order_by_clause]: 排序语句
-
SELECT * FROM student --查询student表中所有数据;
SELECT student_id,student_name FROM student --查询student表中student_id和student_name;
select student_id as 学号,student_name as 姓名 from student --使用别名代替,AS也可直接用空格代替;
select math_score 数学成绩,english_score 英语成绩,math_score+english_score as 总成绩 from student_scores--表达式查询;
select distinct(student_id) from student--去重;
-
SELECT排序数据
-
语法:
ORDER BY {expr | position | c_alias} [ASC | DESC] [NULL FIRST | NULL LAST] [,{expr | position | c_alias} [ASC | DESC] [NULL FIRST | NULL LAST] ]...
- ORDER BY: 排序关键字
- expr: 表达式
- position: 表中列的位置
- c_alias: 别名
- -[ASC | DESC]: 升序或降序
- -[NULL FIRST | NULL LAST]:对空字符串的处理,在前或在后,默认NULL为最大值
select math_score 数学,english_score 英语,math_score+english_score 总成绩 from student_scores order by 总成绩 desc;--默认为升序排列 select * from student_scores order 2;--按照2位置字段排序 select * from student_scores order by 2 desc, 3 desc;--按多字段排序
-
-
SELECT+WHERE字句查询
- WHERE子句中的操作符
- 关系操作符:<,>,=,<=,>=,!=,<>
- 比较操作符:
- IS NULL: 如果为NULL返回TRUE
- LIKE: 模糊比较字符串值
- BETWEEN...AND...: 验证值是否在范围内
- IN: 验证操作数在设定的一系列值中
- 逻辑操作符:
- AND : 两个条件都必须满足
- OR: 满足其中一个条件即可
- NOT: 与某个逻辑值相反
- 语句示例:
- WHERE子句中的操作符
SELECT * FROM student_scores WHERE math_score > 92;
SELECT * FROM student_scores WHERE math_score > 92 AND english_score >98;
SELECT * FROM student_scores WHERE math_score BETWEEN 90 AND 92;
SELECT * FROM student_scores WHERE math_score > 90 OR english_score >1000;
SELECT * FROM student WHERE student_name LIKE '%T%'--_代替一个字符,%代替多个字符;
SELECT * FROM student_scores WHERE student_id IN(1,2);
-
GROUP BY 和 HAVING
GROUP BY 用于组的查询,使用分组查询可以统计数据- 语法:
GROUP BY {expr --通常为列名 | {ROLLUP | CUBE} --GROUP BY的扩展子句,返回小计和总计 ({expr [.expr]...}) }
- 示例
HAVING通常和GROUP BY一起使用,用于限制搜索条件,与组相关而不与单个值相关SELECT class_id,AVG(math_score) FROM student_scores GROUP BY class_id;
SELECT class_id,AVG(math_score) FROM student_scores GROUP BY class_id HAVING AVG(math_score)>95;
-
SELECT子查询
子查询指嵌套查询,多数为WHERE后一个条件表达式select * from student_scores where student_id=(select student_id from student_scores where math_score=90); select student_id from student_scores where student_id in (select student_id from student_scores where math_score>90 AND english_score >95);
-
SELECT连接查询
多表数据联系查询- 简单连接
SELECT * FROM student,student_scores;
- 内连接
- 等值连接(含'=')
select s.class_id,s.student_name,sc.math_score,sc.english_score from student s,student_scores sc where s.student_id=sc.student_id;
- 不等值连接
含>,<,>=,<=,!=,<>,BETWEEN...AND...,IN等select s.class_id,s.student_name,sc.math_score,sc.english_score from student s,student_scores sc where s.student_id in sc.student_id;
- 等值连接(含'=')
- 自连接
把自身表的引用作为另一个表来处理select s.class_id,sc.english_score from student_scores s,student_scores sc where s.class_id!=sc.class_id AND sc.english_score=s.english_score;
- 外连接
- 左外连接(LEFT JOIN)
左向外连接,返回的结果不仅是符合连接条件的行记录,还包含左边表的全部记录。 - 右外连接(RIGHT JOIN)
右向外连接,将右边表中数据与左边表中数据匹配,返回的结果除了配备成功的记录,还有右表中为匹配的记录,并将左表补NULL - 全外连接(FULL JOIN)
左右外连接的综合,未匹配的都补NULL - 外链接中的(+)<符号形式表示外连接>
- 放在非主表的一方(左外连接(+)放在右表),并使用where子句,不使用OUT JOIN;
- 不能用于全外连接
- 若外连接有多个条件,则每个条件后都要加一个(+)
- 左外连接(LEFT JOIN)
网友评论