常用sql语句
sql语句用于对数据库中的表数据进行增删改查操作
-- distinct 用于不重复的字段值
SELECT DISTINCT plan_code FROM verification_project_info;
-- and or 用于连接过滤条件
SELECT * FROM verification_project_info WHERE project_id=43 OR project_id=38 (project_id!=44) ORDER BY create_time DESC;
SELECT Store_Name FROM Store_Information WHERE Sales > 1000 OR (Sales < 500 AND Sales > 275);
-- in 用于过滤某些不连续的特定字段值的数据
SELECT * FROM verification_project_info WHERE type_collection IN ('宣导会费','第三方人员激励');
-- between 用于过滤连续范围内的数据
SELECT * FROM verification_project_info WHERE create_time BETWEEN "2019-01-22 13:15:54" AND "2019-01-25 15:44:15";
-- like 模糊查询
SELECT * FROM verification_project_info WHERE project_name LIKE “%人员激励%” '提供%‘ ’%宣导会费)';
% (百分比符號):代表零個、一個、或數個字母
_ (底線):代表剛好一個字母
-- order by 排序
asc 由小往大排序
desc 由大往小排序
-- 函数
AVG(平均) COUNT(计数) MAX(最大值) MIN(最小值) SUM(求和)
-- group by 分组
SELECT Store_Name, SUM(Sales) FROM Store_Information GROUP BY Store_Name;
-- having 对函数产生的值来设定条件,并不一定要包含group by子句
SELECT Store_Name, SUM(Sales) FROM Store_Information GROUP BY Store_Name HAVING SUM(Sales) > 1500;
-- 连接 内部连接:选取多表格中的相同值 外部连接:第二個表格沒有相對的資料時, SQL 會傳回 NULL 值
SELECT A1.Store_Name, SUM(A2.Sales) SALES FROM Georgraphy A1, Store_Information A2 WHERE A1.Store_Name = A2.Store_Name (+) GROUP BY A1.Store_Name;
-- null / not null
SELECT * FROM verification_project_info WHERE parent_id IS NULL (parent_id IS NOT NULL) ORDER BY create_time DESC
-- left join
SELECT SUM(item.voucher_price) FROM promotion_voucher_item item LEFT JOIN promotion_voucher_info info ON item.voucher_type_id = info.id AND item.store_code = "SFA202055871" AND (info.generation_type = 0 OR info.generation_type = 1) AND item.generate_time >= '2019-03-01 00:00:00'
CREATE TABLE Customer (First_Name char(50), Last_Name char(50), Address char(50), City char(50);
-- 主键
用来标识独一无二的记录;主键可包含一个或多个字段,包含多个字段时,称为组合键
-- 外键
一个表的字段指向另一个表主键,该键就称为外键;目的确保资料的完整性
-- 索引
用于加快表格中查询速度;CREATE INDEX "索引名" ON "表格名" (欄位名);
-- 改变表结构 alter table
-- 删表 DROP TABLE Customer;
-- 清除表内容,保留表结构 TRUNCATE TABLE Customer;
-- 表中插入数据
一次输入一笔 INSERT INTO "表格名" ("欄位1", "欄位2", ...) VALUES ("值1", "值2", ...);
一次输入多笔 INSERT INTO "表格1" ("欄位1", "欄位2", ...) SELECT "欄位3", "欄位4", ... FROM "表格2";
-- 修改表中数据 UPDATE "表格名" SET "欄位1" = [新值] WHERE "條件";
-- 删除表中的数据 DELETE FROM "表格名" WHERE "條件";
-- union
将两个sql语句的结果合并起来,结果是只会看到不同的字段值
一个限制是两个sql语句所产生的字段需要是相同的
SELECT Txn_Date FROM Store_Information UNION SELECT Txn_Date FROM Internet_Sales;
-- union all 结果允许相同的字段值
-- 子查询 在where或having子句中插入另一个sql语句时,为子查询架构
SELECT SUM(Sales) FROM Store_Information WHERE Store_Name IN (SELECT Store_Name FROM Geography WHERE Region_Name = 'West');
SELECT SUM(a1.Sales) FROM Store_Information a1 WHERE a1.Store_Name IN (SELECT Store_Name FROM Geography a2 WHERE a2.Store_Name = a1.Store_Name);
-- exists exists用来检测内查询有没有产生结果,若有,则执行外查询的sql,若没有的话,整个sql不会产出任何结果
SELECT SUM(Sales) FROM Store_Information WHERE EXISTS (SELECT * FROM Geography WHERE Region_Name = 'West');
-- case
SQL中的CASE表达式是一种通用的 条件表达式,类似于其他语言中的if/else语句。 它用于在SQL语句中实现条件逻辑。 CASE表达式以WHEN子句开始,后面跟着一个或多个WHEN条件,每个WHEN条件后面跟着一个THEN子句。 如果任何WHEN条件为真,则返回相应的THEN子句中的表达式。 如果没有任何WHEN条件为真,则可以选择性地使用ELSE子句来指定一个默认的表达式。
SELECT CASE ("欄位名") WHEN "條件1" THEN "結果1" WHEN "條件2" THEN "結果2" ... [ELSE "結果N"] END FROM "表格名";
SELECT Store_Name, CASE Store_Name WHEN 'Los Angeles' THEN Sales * 2 WHEN 'San Diego' THEN Sales * 1.5 ELSE Sales END FROM Store_Information;
--SQL的delete, drop, truncate 区别
- 执行速度:drop > truncate > detele。
- delete 和 truncate 只删除表数据,而 drop 会删除表数据和表结构以及表的索引、约束和触发器。
- delete 可以加 where 条件实现部分数据删除,而 truncate 和 drop 不能加 where 条件是整体删除。
- truncate 和 drop 是立即执行,且不能恢复;而 delete 会走事务,可以撤回和恢复。
- truncate 会重置自增列为 1,而 delete 不会重置自增列。
- truncate 和 drop 是 DDL 语句,而 delete 是 DML 语句。