SQL语法

作者: 雨一流 | 来源:发表于2017-01-12 11:01 被阅读0次

    查询:

    select employee_name from employees;

    select employee_name from employees where employee_age > 25;

    select e.employee_name, s.salary from employees e, salary s where e.employee_id =  s.employee_id;

    selectdistincte.employee_name, s.salary from employees e, salary s where e.employee_id =  s.employee_id;

    distinct关键字用于获取结果集中列e.employee_name 与 s.salary的唯一性组合(distinct相当于去重

    select e.employee_id, e.employee_name,sum(s.salary)  total_salaryfrom employees e, salary s where e.employee_id =  s.employee_idgroup by e.employee_id, e.employee_name;

    select e.employee_id, e.employee_name, sum(s.salary)  total_salary from employees e, salary s where e.employee_id =  s.employee_id group by e.employee_id, e.employee_namehaving (sum(s.salary)) > 10000;

    select distinct e.employee_name, s.salary from employees e, salary s where e.employee_id = s.employee_idorder by s.salary desc;

    select e.employee_id, e.employee_name, sum(s.salary)  total_salary from employees e, salary s where e.employee_id =  s.employee_id group by e.employee_id, e.employee_nameorder by total_salary desc;

    order by 子句与distinct关键字同时使用时,也必须遵循一个规则--------order by 子句所指定的排序列必须出现在select表达式中。

    select * from employees where employee_id in (select employee_id from salary);子查询

    联合语句:union(并集且去重),union all(并集不去重,效率高) , intersect(交集), minus(差集)

    联合语句可以进行混合运算,优先级相同,依次运行。

    select student_id, student_name, student_age from a_studentsunionselect student_id, student_name, student_age from b_students;

    两个查询的列数且数据类型必须相同。

    minus是集合间的减法运算,该运算返回第一个集合中存在的,而第二个集合中不存在的记录。

    连接:

    自然连接natural join:原则,两个数据源的共有列,且具有相同的列值。

    select * from employeesnatural joinsalary.

    不能为公共列employee_id添加限定词,即不能写成employees.employee_id。

    对于自然连接外的其他列可以使用限定词。

    例如:

    select employee_id, e.employee_name, s.month, s.salary from employees enatural joinsalary s ;

    内连接inner join:

    select e.employee_id, e.employee_name, s.month, s.salary from employees e  (inner/可省略) joinsalary sone.employee_id = s.employee_id

    on为指定搜索条件。

    此举与where结果相同,当设计表比较多时使用join比较好。

    select * from employees join salary on ... join company on ... join sales on ...;

    外连接left join和right join:

    左连接即以左表为基础,右连接即以右表为基础。

    select e.employee_id, e.employee_name, s.month, s.salary from employees eleft joinsalary sone.employee_id = s.employee_id

    本表以employees为基础,将salary表连接到本表,这样有些没有领工资的员工也会出现子啊结果中。

    简写:

    select e.employee_id, e.employee_name, s.month, s.salary from employees e,salary s where e.employee_id = s.employee_id(+)

    s.employee_id(+)即表示salary为附属表,当多个数据源连接是最好不使用简写。

    完全连接full join:是一个左连接和一个右连接的组合,最后去除重复记录。结果与两个数据源顺序无关。

    select e.employee_id, e.employee_name, s.month, s.salary from employees e  full join salary s where e.employee_id = s.employee_id

    层次化查询(遍历树):

    select market_id, market_name from marketstart withmarket_name = '亚洲'connect by priormarket_id = parent_market_id;

    start_with为起始条件,connect by 指定如何递归下一条记录,且遵循深度优先搜索策略,prior指前一条记录。priormarket_id即为前一条记录的market_id 等于下一条记录的parent_market_id。

    插入数据:

    insert intostudents (student_id,student_name)values(1, '扎古斯那')

    批量插入:

    insert  into c_students(student_id, student_name) select student_id, student_name from students where student_id < 10;

    更新数据:

    update 表名 set 列1=“hhh”, 列2 = “1111”  where 。。。

    删除数据:

    delete from students where student_id > 10;

    truncate table students;

    truncate table删除全部数据,且不可回滚恢复。

    创建数据库表:

    create tablestudent (student_name varchar 数据类型,student_age varchar 数据类型,。。。。)tablespaceusers.

    增加字段

    alter tablestudentadd(class_id number);

    修改数据类型

    alter tablestudentmodify(class_id varchar2(20) );

    删除已有列

    alter table studentdrop column class_id;

    字段重命名:

    alter table studentrename column student_id to id;

    表空间转移

    alter table studentmove tablespace users;

    删除数据库表

    drop table student;

    drop table studentcascade constraints;  cascade constraints将与本表主键用作外键的其他表的约束删除,否则只删除student时无法删除。

    字符处理方法:

    向左补全字符lpad()函数:

    lpad(string, padded_length, [pad_string])

    select lpad('1', 4, '0') employee_no from dual; 结果为0001;

    向右补全字符串-----rpad()函数:

    select rpad('1', 4, '*')  employee_no from dual;结果为1***;

    返回字符串的小写-----lower()函数:

    select  username, password from dba_users wherelower(username) = 'system';

    返回字符串的大些形式----upper()函数:

    select  username, password from dba_users whereupper(username) = 'system';

    首字母大写initcap():

    select initcap ('we all like bike') new_string from dual;结果为We All Like Bike;

    返回字符串长度length()函数:

    select length('12345') len from dual;

    截取字符串substr()函数:

    substr(string, start_index, length)

    select substr('123456789', 2, 3) sub_string from dual; 结果为234,oracle字符串下表从1开始

    获取字符串出现的位置---instr()函数

    instr (string, sub_string, start_index, times)

    select instr('123456789', '56', 2, 3) position from dual;从第2个字符搜索‘56’,直到第三次出现‘56’,因为没有,所以结果为0;

    删除字符串左侧空格-----ltrim()函数:

    select ltrim('        000') new_str from dual;

    删除字符串右侧空格-----rtrim()函数:

    select ltrim('000        ') new_str from dual;

    删除字符串两侧空格-----trim()函数:

    select trim('       000       ') new_str from dual;

    串联字符串-----concat()函数:

    select concat('hello', '  word') new_str from dual;结果为hello  word,concat只有两个参数,只能连接两个字符串。

    翻译字符串-----translate()函数:

    反转字符串-----reverse()函数:

    select reverse('abcdfgh') from dual;结果为hgfedcba

    复杂数据处理

    求最大值-----max()函数:

    select max(employee_age) max_age from employee;

    求最小值-----min()函数:

    select min(employee_name) min_name from employees;

    求平均值-----avg()函数:

    select avg(employee_age) avg_age from employees;

    求和-----sum()函数:

    select sum(employee_age) sum_age from employees;

    统计记录数-----count()函数:

    统计单列: select count(employee_name)  count_name, count(employee_position)  count_position from employees;

    统计所有列:select count(*) from employees;

    利用count(1)进行统计:select count(1) from employees;

    相关文章

      网友评论

          本文标题:SQL语法

          本文链接:https://www.haomeiwen.com/subject/gykrbttx.html