02_SELECT语句

SELECT语句:从数据库的表中获取符合条件的记录

1. 基本语法:SELECT *[|列名 [[AS] 别名], 列名2...] FROM 表名 [[AS] 别名];

2. 使用||做连接:Oracle中的字符串用''引号。
   例:SELECT '姓名:'||ename||'月薪'||sal FROM emp;

3. 使用DISTINCT可以消除重复内容,在查询单列时才有效。

4. Oracle特有的伪列:
   1) ROWID: Oracle内部对每个表的每一行都有一个唯一的标识。
   2) ROWNUM: Oracle对每次查询结果集的每一行记录都有一个行号。
              对结果集的数据进行标识。不能对ROWNUM直接使用>,>=,!=,between..and

5. WHERE子句:使用WHERE指定的条件对数据进行筛选,返回符合条件的记录(行)。
   SELECT *[|列名 [[AS] 别名], 列名2...]
      FROM 表名 [[AS] 别名]
      WHERE 条件;
   1) WHERE子句可以包括运算符,使用(),常量,列,函数,SQL操作符。

6. 运算符:
  1) 算术:+ - * /
  2) 比较:> >= < <= = !=(<>),ANY(值1,值2...) ALL(值1,值2...)
  3) 逻辑:AND OR NOT

7. SQL操作符:
  1) IN(值1,值2...)
  2) LIKE '模式字符串':_代表任意一个字符,%代表0到n个字符
  3) BETWEEN 数值1 AND 数值2:不仅可用于数值,还可以用于日期时间
  4) IS NULL,IS NOT NULL:匹配空值,非空值。对于空值一定不能用=或!=
  5) IS NAN:非数字。IS NOT NAN:数字。Oralce特有

8. 对结果进行排序:ORDER BY 排序列名[别名] [ASC|DESC], 排序列名[别名] [ASC|DESC]...

9. SQL函数:
  1) 单行函数:同时只能对一行进行操作,且对于每一行返回一个值。
     聚合函数:同时对多行进行操作,这多行只返回一个值。
  2) 单行函数:
     a) 字符串:lower(char),upper(char),length(char),initcap(x)
     b) 数字:round(number,n)
     c) 日期时间:sysdate 返回数据库所在操作系统的当前日期时间。
                  systimestamp 返回数据库所在操作系统的当前时间戳。
        last_day(d) 返回指定日期当月的最后一天的日期时间
        trunc(d[,unit]) 截断日期时间,unit: 'year', 'month', 'day'
     d) dual表是Oracle提供给任何用户的一个表,常用在没有目标表的SELECT语句中。
     e) 转换函数:
        to_char(datatime[,format]), format: yyyy,mm,dd,hh24,mi,ss
        to_char(number[,format]), format: l, 9, ','
        to_char(char[,format])
        to_date(char[,format]), 字符串-->日期时间
        to_timestamp(char[,format]), 字符串-->日期时间戳
        to_number(expr[,format])
     f)其它函数:
        nvl(expr1,expr2)  如果expr1为空,返回expr2的值,否则返回expr1。
        nvl2(expr1,expr2, expr3)  如果expr1不为空,返回expr2,否则返回expr3。
        decode(expr, search1,result1,search2,result2,...)
        case expr when search1 then result1
                  when search2 then result2
                  ...
                  else resultn
        end

高级查询
1. 聚合函数:对多行(组)进行操作,多行返回一个结果。分组函数。
2. 常用的:
  1) count(x) 建议用count统计记录数时,使用count(rowid)效率更高
  2) sum(x)
  3) avg(x)
  4) max(x)
  5) min(x)

3. 分组统计:
  SELECT * FROM 表名
     WHERE 过滤条件
     GROUP BY 分组条件
     ORDER BY 列名,..;
  1) SELECT的列没有出现在聚合函数中,就必须出现在GROUP BY子句中。
  2) 聚合函数不能出现在WHERE子句中。

4. 分组过滤:
  SELECT * FROM tablename
     WHERE condition
     GROUP BY condition
     HAVING codition
     ORDER BY colName;

5. 多表查询:使用单个SELECT语句从多个表中取出相关的数据。
 1) 内连接: 列出所有连接表中与连接条件相匹配的数据行。
    SELECT ... FROM 主表名 别名
       [INNER] JOIN 从表名 别名
       ON 连接条件
       WHERE 条件...;
    [SELECT ... FROM 表名1,表名2 WHERE 连接条件 and 过滤条件]
 2) 外连接:
    左外连接:不仅列出所有连接表中与连接条件相匹配的数据行,还列出左表中符合WHERE过滤条件的数据行。
    SELECT ... FROM 主表名 别名
       LEFT [OUTER] JOIN 从表名 别名
       ON 连接条件
       WHERE 条件...;
    [SELECT ... FROM 表名1,表名2 WHERE 左表.列名=右表.列名(+) and 过滤条件]
    右外连接:
    全外连接:
 3) 交叉连接:笛卡尔积。
    SELECT ... FROM 主表 CROSS JOIN 从表;
    [SELECT ... FROM 表名1,表名2]
 4) 自连接
 5) SQL92语法,自行了解。
 
6. 子查询:把SELECT的结果当作另一个查询语句的一部分。
  1) 子查询可以出现在主查询语句的任意位置。
  2) 子查询效率比表连接查询低。
  3) 表连接查询语句都可以替换成子查询语句,但反之不成立。
  4) 单行单列比较操作符:= != < <= > >=
     多行比较操作符:IN, ANY,ALL
7. 集合操作符
  1) UNION 并集
  2) UNION ALL 合集
  3) INTERSECT 交集
  4) MINUS 差集

8. ROWNUM实现分页查询:在有结果集后的行号。
  1) 不能直接作为:> >= != between ..and..的条件
  2) 不能以基表名或别名作为前缀引用。
  3) 示例:
  select * from (select rownum r,e.* from emp e where sal>1500) where r between 5 and 10;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值