您的位置:首页 > 数据库

常用SQL语句的整理

2017-02-11 16:35 344 查看
普通sql语句

创建普通用户:crete user 用户名identified by 用户密码;

删除用户:drop user 用户名 cascade;

授权:grant resource,connect to 用户名;

查询日期:select sysdate from dual;

修改列宽:col 列名 format a8;

Col 列名 format 9999,999;

创建表: create table stu(id number(4)constraint pk_stu primary key,name varchar2(8),age number(2));

断开连接:exit,quit,disconn

查询用户的所有表: select table_name from user_tables;

以明口令方式连接到用户:connect 用户名/账号密码;

以隐藏口令方式连接到用户:connect system;

退出数据库方式:exit,quit

列出表结构信息:desc 表名;

多表查询

用户操作的功能所涉及的数据往往不在一张表中;

通过Join(连接)可将多张表连接起来查询数据;

通常通过表的主键和外键进行表之间的连接;

表的join方式

等价连接,不等价连接,外链接(包括左外连接和右外连接),内连接和全连接,自连接,集合运算符union,minus,union all,intersect

笛卡尔积的避免

采用连接查询;

SELECT table.column, tble.column FROM table1, table2 WHERE table1.column1=table2.column;

通常采用主键和外键进行表的连接;

有重复的列名一定要通过表名分隔,建议重不重复都加上表名,可以大幅度地提高性能;

可以为表名提供别名,操作更加方便;

表的连接方式

等价连接:

俩个表间的连接方式是通过“=”建立;

别名:

列的别名在SELECT语句中定义,表的别名在FROM子句中定义;

别名只在该语句中有用;

一旦给表创建了别名,标识列时只能通过表的别名,而不能是表的真名;

例子1:

SELECT e.last_name,e.dept_id,d.id,d.name

FROM s_emp e,s_dept d

WHERE e.dept_id=d.id

AND e.dept_id=42;

不等价连接:

俩个表间的连接条件不是通过“=”号建立,可以是“<”,“BETWEEN AND”,以及“LIKE”等,总之不是“=”号;

例子:

SELECT e.ename,e.job,e.sal,s.grade

FROM emp e,salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

外链接:

左外连接等同于在“=”右边加“+”,将“=”右边表中未匹配的记录也查找出来;

右外连接等同于在“=”左边加“+”,将“=”左边表中未匹配的记录也查找出来;

外链接只能出现在表达式的一边;

包含外链接的条件不允许(使用in操作符,使用Or操作符连接到另外一个条件)

内连接:inner join

内连接:查询出匹配的记录,未匹配的记录无法查询出;

例子:

SELECT e.last_name,e.id,c.name

FROM s_custtomer c inner join s_emp e

ON e.id=c.sales_rep_id

ORDER BY e.id;

全连接:full outer join

全连接:查询俩侧表所有记录包括未匹配的记录

例子:

SELECT e.last_name ,e.id,c.name

FROM s_emp e full outer join s_customer c

ON e.id=c.sales_rep_id

ORDER BY e.id;

自连接:

例子:

SELECT worker.last_name||’works for’||manager.last_name

FROM s_emp worker,s_emp manager

WHERE worker.manager_id=manager.id;

例子:从s_emp表中找出所有员工信息(包括未分配进部门的员工);

SELECT emp.id,emp.last_name,emp.manager_id,mgr.id

FROM s_emp emp, s_emp mgr

WHERE emp.manager_id=mgr.id(+);

集合运算符:

Union

Union在进行表连接后会筛选掉重复的记录,所以在表连接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果;

Select * from 表1 union select *from 表2;

Union all

Union all 将俩个结果合并后就返回且不进行排序,这样,如果返回的俩个结果集中有重复的数据,那么返回的结果集就会包含重复的数据;

Minus(减)

第一个结果集减去第二个结果集中的记录(在第一个结果集也存在的公共记录);

Select * from A

minus

select * from B;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql