一、SQL语言
SQL是用于访问和处理数据库的标准的计算机语言。SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。
SQL语言共分为两大类:
1、数据操纵语言DML:主要包括增删改查(insert、delete、select、update)
2、数据定义语言DDL:主要包括创建、修改、删除(create、alter、drop)数据库、表、索引。
二、数据操纵语言DML
1、SELECT语句
SELECT 列名称 FROM 表名称
或者
SELECT * FROM 表名称
(1)DISTINCT:去掉重复
SELECT DISTINCT 列名称 FROM 表名称
(2)WHERE:条件
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
(3)AND和OR:与和或运算符
(4)ORDER BY:排序
DESC代表降序排列
ASC代表升序排列(默认)
(5)LIKE:匹配
%:替代一个或多个字符
_:仅替代一个字符
(6)IN和NOT IN:在和不在集合中
(7)BETWEEN AND:在数据值之内,值可以是数值、文本或者日期
(8)AS:列名称和表名称指定别名
(9)UNION:合并两个或多个 SELECT 语句的结果集,UNION ALL允许重复
(10)JOIN:连接表
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
- JOIN(INNER JOIN): 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
(11)ROWNUM:序列(oracle)
常用来分页,注意rownum>2使用陷阱
SELECT *
FROM (SELECT row_.*, rownum rn
FROM A
WHERE rownum <= 30000)
WHERE RN > 20000
2、INSERT语句
INSERT INTO 表名称 VALUES (值1, 值2,....)
或者
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
查询其他表插入
INSERT INTO table_name (列1, 列2,...) select(列1, 列2,...) FROM table_name2
3、UPDATE语句
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
或者
UPDATE 表名称 SET 列名称 = 新值 ,列名称 = 新值 WHERE 列名称 = 某值
4、DELETE语句
DELETE FROM 表名称 WHERE 列名称 = 值
三、数据定义语言DDL
1、CREATE:创建数据库或表或序列或视图
CREATE DATABASE database_name
或者
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
或者
CREATE INDEX index_name ON table_name (column_name)
或者
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
列约束
- NOT NULL:不为空
- UNIQUE:唯一
- PRIMARY KEY:主键
- FOREIGN KEY:外键
- CHECK:检验条件
- DEFAULT:默认值
- AUTO_INCREMENT:自增
2、DROP: 撤销索引、表以及数据库
DROP DATABASE 数据库名称
或者
DROP TABLE 表名称
或者
DROP INDEX index_name
3、ALTER :添加、修改或删除表中列
ALTER TABLE table_name ADD column_name datatype
或者
ALTER TABLE table_name DROP COLUMN column_name
或者
ALTER TABLE table_name ALTER COLUMN column_name datatype
四、多表操作
1、多表联合更新
oracle:
update customers a -- 使用别名
set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id)
where exists (select 1
from tmp_cust_city b
where b.customer_id=a.customer_id
)
-- update 超过2个值
update customers a -- 使用别名
set (city_name,customer_type)=(select b.city_name,b.customer_type
from tmp_cust_city b
where b.customer_id=a.customer_id)
where exists (select 1
from tmp_cust_city b
where b.customer_id=a.customer_id
)
mysql:
UPDATE td_population_people A
SET
A.Issuing_standard=(SELECT B.Issuing_standard FROM td_population_people_approved B
WHERE B.People_code=A.People_code and
B.people_approved_xh = '201')
2、start with connect by prior 递归查询用法
https://www.cnblogs.com/benbenduo/p/4588612.html
3、查找一张表的外键
删除表A的记录时,Oracle 报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录
select a.constraint_name, a.table_name, b.constraint_name
from user_constraints a, user_constraints b
where a.constraint_type = 'R'
and b.constraint_type = 'P'
and a.r_constraint_name = b.constraint_name
and a.constraint_name = 'FKXXX'