sql学习笔记

来源:互联网 发布:交换机有端口号吗 编辑:程序博客网 时间:2024/06/08 04:00
  1. select 可以嵌套,可作为select 的选择对象,where 的条件等 eg:select (select sum(commission_pct) from employees)/(select count(*) from employees ) from dual;
  2. select 作用: a.列选择:SELECT Column1, Column2 from table1;   b.行选择:SELECT * FROM table1;c.多表链接查询 :SELECT table1.Column1,table2.Column2 from table1,table2…
  3. SQL语句中的数学表达式:对于数值和日期型字段,可以进行 “加减乘除”:SELECT last_name, salary, salary + 300 FROM employees;
  4. NULL表示 不可用、未赋值、不知道、不适用 , 它既不是0 也不是空格。记住:一个数值与NULL进行四则运算,其结果是? NULL
  5. AS 给列取别名,可以省略。若别名没用双引号,则自动转换为全大写。eg:SELECT colum1 AS co1...结果为CO1,如果是。。AS “co1”。。。结果为 co1
  6. 字符串连接操作符: “||”,连接函数 CONCAT(str1,str2);str1str2;   eg:SELECT last_name||job_id AS "Employees"
    FROM employees;
  7. DISTINCT去除重复行:SELECT DISTINCT department_id FROM employees;使用DISTINCT消除重复结果行
  8. IN(set)在一个集合范围内
  9. 使用LIKE做模糊匹配:%代表0个或者多个 字符. _代表一个单个字符 eg:SELECT last_name
    FROM employees
    WHERE last_name LIKE '_o%';select * from t_char where a like ‘%\%%' escape '\';
  10. SELECT last_name, manager_id
    FROM employees
    WHERE manager_id IS NULL;
  11. 按照字段别名排序:SELECT employee_id, last_name, salary*12 annsal
    FROM employees
    ORDER BY annsal;
  12. LOWER('SQL Course') sql course
    UPPER('SQL Course') SQL COURSE
    INITCAP('SQL course') Sql Course
  13. CONCAT('Hello', 'World') HelloWorld
    SUBSTR('HelloWorld',1,5) Hello
    LENGTH('HelloWorld') 10
    INSTR('HelloWorld', 'W') 6
    LPAD(salary,10,'*') *****24000
    RPAD(salary, 10, '*') 24000*****
    TRIM('H' FROM 'HelloWorld') elloWorld
    TRIM(' HelloWorld') HelloWorld
    TRIM('Hello World') Hello World
  14. ROUND(45.926, 2) 45.93
    TRUNC(45.926, 2) 45.92
    MOD(1600, 300) 100
  15. MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') 19.6774194
    ADD_MONTHS ('11-JAN-94',6) 11-Jul-94
    NEXT_DAY ('01-SEP-95','FRIDAY') 8-Sep-95
    NEXT_DAY ('01-SEP-95',1) 3-Sep-95
    NEXT_DAY ('1995-09-01',1)
    ORA-
    01861:literal
    does not match
    format string
    NEXT_DAY (to_date('1995-09-01','YYYY-MM-DD'),1) 3-Sep-95
    LAST_DAY('01-FEB-95') 28-Feb-95
    ROUND('25-JUL-95','MONTH') 1-Aug-95
    ROUND('25-JUL-95' ,'YEAR') 1-Jan-96
    TRUNC('25-JUL-95' ,'MONTH') 1-Jul-95
    TRUNC('25-JUL-95','YEAR') 1-Jan-95
  16. TO_CHAR(date, 'format_model') ;
    日期格式化元素 意义
    YYYY 4位数字表示的年份
    YEAR 英文描述的年份
    MM 2位数字表示的月份
    MONTH 英文描述的月份
    MON 三个字母的英文描述月份简称
    DD 2位数字表示的日期
    DAY 英文描述的星期几
    DY 三个字母的英文描述的星期几简称
    HH24:MI:SS AM 时分秒的格式化
    DDspth 英文描述的月中第几天
    fm 格式化关键字,可选


  17. TO_NUMBER(char[, 'format_model']) ;
  18. TO_DATE(char[, 'format_model']);


  19. NVL (expr1, expr2)如果expr1为空,这返回expr2
    NVL2 (expr1, expr2, expr3) 如果expr1为空,这返回expr3(第2个结果)否则返回expr2
    NULLIF (expr1, expr2) 如果expr1expr2相等,则返回空
    COALESCE (expr1, expr2, ..., exprn)
    如果expr1不为空,则返回expr1,结束;否则计算expr2,直到找到
    一个不为NULL的值 或者如果全部为NULL,也只能返回NULL
  20. SELECT last_name, job_id, salary,
    CASE job_id
    WHEN 'IT_PROG' THEN 1.10*salary
    WHEN 'ST_CLERK' THEN 1.15*salary
    WHEN 'SA_REP' THEN 1.20*salary
    ELSE salary
    END "REVISED_SALARY"
    FROM employees;


  21. SELECT last_name, job_id, salary,
    DECODE(job_id, 'IT_PROG', 1.10*salary,
    'ST_CLERK', 1.15*salary,
    'SA_REP', 1.20*salary,
    salary) REVISED_SALARY
    FROM employees;
  22. SELECT table1.column, table2.column
    FROM table1, table2
    WHERE table1.column(+) = table2.column;   oracle左连接


  23. sql 自然连接SELECT department_id, department_name,location_id, cityFROM departments NATURAL JOIN locations ;自然链接:相当于Oracle的“等于连接”,只不过是让系统自己去找两张表中字段名相同的字段作为
    “等于连接”条件;(注意如果两个表中有相同的列名,但字段类型不一样,这会引发一个错误)
  24. SELECT e.employee_id, e.last_name, d.location_id
    FROM employees e JOIN departments d
    USING (department_id) ;
  25. 内连接 SELECT employee_id, city, department_name
    FROM employees e
    INNER JOIN departments d ON d.department_id = e.department_id
    INNER JOIN locations l ON d.location_id = l.location_id;

    INNER JOIN 可简写为JOIN ,即省去INNER
  26. 左外连接
    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e
    LEFT OUTER JOIN departments d
    ON (e.department_id = d.department_id) ;


  27. SELECT e.last_name, e.department_id, d.department_name
    FROM employees e
    FULL OUTER JOIN departments d
    ON (e.department_id = d.department_id) ;
  28. 分组计算函数:相对于单行函数,也可称之为多行函数,它的输入是多个行构成得一个行集(这个行集可以是
    一张表的所有行,也可以是按照某个维度进行分组后的某一组行),而输出都是一个值;
    比如我们常见的一些分组计算需求:求某个部门的薪资总和,薪资平均值,薪资最大值等等。


    1、求和(SUM)
    2、求平均值(AVG)
    3、计数( COUNT
    4、求标准差(STDDEV)
    5、求方差(VARIANCE)
    6、求最大值(MAX)
    7、求最小值(MIN)

    备注:MIN, MAX可用于任何数据类型,但AVGSUMSTDDEV, VARIANCE仅适用于数值型字段。

  29. COUNT(*)返回满足选择条件的所有行的行数,包括值为空的行和重复的行
    COUNT(expr) 返回满足选择条件的且表达式不为空行数。
    COUNT(DISTINCT expr) 返回满足选择条件的且表达式不为空,且不重复的行数。
  30. 使用GROUP BY子句进行分组


  31. DELETE FROM departments
    WHERE department_name = 'Finance';
    1 row deleted.
    举例二:删除一张表中的所有记录
    DELETE FROM copy_emp;
    22 rows deleted.
    如果遇到这种需求,也可以使用TRUNCATE语句,TRUNCATE TABLE copy_emp ,
    但要注意, TRUNCATE 语句无法回滚,因此除非是单独执行,并非常确认,否则慎用。

    1. create table TEST  
    2. (  
    3.   ID   NUMBER not null,  
    4.   NAME VARCHAR2(20)  
    5. )  
    6. ALTER TABLE SCOTT.TEST RENAME TO TEST1--修改表名  
    7. ALTER TABLE SCOTT.TEST RENAME COLUMN NAME TO NAME1 --修改表列名  
    8. ALTER TABLE SCOTT.TEST MODIFY NAME1 NUMBER(20)  --修改字段类型  
    9. ALTER TABLE SCOTT.TEST ADD ADDRESS VARCHAR2(40) --添加表列  
    10. ALTER TABLE SCOTT.TEST DROP COLUMN ADDRESS --删除表列  


0 0
原创粉丝点击