SQL语法

查询:

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语法)