SQL笔记
一、DDL
1.数据类型
字符 varchar2(可变长度) char(固定长度)
数字 number(数字) float(小数)
日期 date(精确到秒)
2.数据定义语言
CREAT TABLE productinfo
(
productID varchar2(10),
productName varchar2(10)
)
ALTER TABLE productinfo
ADD remark varchar2(200);
MODIFY remark number(2,2);
DROP column remark;
3.约束
CREAT TABLE productinfo
(productID varchar2(10),
primary key(productID)
)
之后添加约束
ALTER TABLE productinfo
ADD CONSTRAINTS pk_productinfo PRIMARY KEY(productID)
二、DML&DQL简单介绍
添加数据用INSERT
INSERT INTO productinfo(productID,productName) values(a,a);
INSERT INTO productinfo(productID,productName) select x1,x2 FROM table2;
CREAT TABLE productinfo2 AS SELECT productID,productName FROM productinfo;
修改数据用UPDATE
UPDATE productinfo SET productID=a,productName=a WHERE ...;
删除数据用DELETE
DELETE FROM productinfo WHERE ...
查询数据用SELECT
SELECT * FROM productinfo where productID='a';
无条件删除全表记录 TURNCATE TABLE productinfo
[同时进行增加和修改MERGE
MERGE INTO productinfo
USING productinfo2
ON ()
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
]
三、SELECT简单检索
SELECT
DISTINCT
productName
FROM productinfo
WHERE...
“`
使用别名替代字段名
SELECT productID 产品编号,productName AS 产品名称 FROM productinfo;
输出结果调整
SELECT productID,productprice || ‘’ || 1.25 || ‘’ || productprice*1.25 AS new_productprice FROM productinfo;
去重
SELECT distinct(category) 产品类型 FROM productinfo;
排序(ASC DESC NULL值默认最小,表达式,字段位置可作为排序字段)
SELECT productName,quantity FROM productinfo ORDER BY quantity DESC;
SELECT productName,quantity FROM productinfo ORDER BY quantity DESC NULLS LAST;
多字段排序(第一字段相同按第二字段再排序)
SELECT productName,category,quantity FROM productinfo ORDER BY category ASC,3 DESC;
要求产品前6位是024003
…WHERE SUBSTR(productID,1,6) = ‘024003’;
多个条件用BETWEEN AND,AND,OR
模糊查询‘_’替代一个字符,’%’替代多个字符
SELECT productName,productprice FROM productinfo WHERE productName LIKE ‘%三星%’;
用IN查询
SELECT…FROM productinfo
WHERE category NOT IN(‘123’,’345’);
针对NULL数据
…WHERE quantity IS NOT NULL;
分组(不允许放在WHERE语句里面,可以放在后面)
SELECT category,AVG(productprice) 平均价格 FROM productinfo GROUP BY category;
计算出不同类型产品的平均价格列出高于2000的(WHERE对FROM负责,HAVING对GROUP负责)
…GROUP BY category HAVING AVG(productprice)>2000;
子查询(ANY,SOME,ALL)
SELECT productName,productprice FROM productinfo
WHERE productprice =
some (SELECT productprice FROM productinfo WHERE category = ‘0100’) AND category <> ‘0101’;
四、连接查询
内连接
五、常用函数
SIGN()取符号,正数1,00,负数-1,FLOAT和DOUBLE或者NaN时都会返回1
CEIL(n)返回大于等于n的最小整数
FLOOR(n)返回小于等于n的最大整数
ROUND(100.12345,4)四舍五入成4位小数,即100.1235,n为负数则为100.1
TRUNC()函数与ROUND类似,不进行四舍五入,直接截取
LENGTH()获取字符长度
SUBSTR()截取字符
SELECT SUBSTR(Store_Name, 3)
FROM Geography
WHERE Store_Name = ‘Los Angeles’;
输出结果 ‘an D’
REPLACE()替换字符串
RPAD()字符串填充
TRIM()删除字符串首尾指定字符
六、日期部分
SYSDATE得到系统当前日期
SYSTIMESTAMP得到系统时间
LAST_DAY()返回参数指定日期对应月份的最后一天
NEXT_DAY(SYSDATE,‘星期一’)当前日期向后一周的星期一的日期
EXTRACT()得到指定的日期部分
MONTHS_BETWEEN()