SQL執(zhí)行順序
第一步:執(zhí)行FROM
第二步:WHERE條件過濾
第三步:GROUP BY 分組
第四步:執(zhí)行SELECT 投影列
第五步:HAVING條件過濾
第六步:執(zhí)行ORDER BY排序
一、創(chuàng)建、刪除庫
-- 創(chuàng)建新數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名;
-- 刪除數(shù)據(jù)庫
DROP DATABASE 數(shù)據(jù)庫名;
二滔迈、增加
1舷嗡、添加列名吐辙、設(shè)置主鍵蜀备、設(shè)置自動增長列
primary key表示當(dāng)前列為主鍵列,不能重復(fù)荠卷,不能為空
out_increment表示當(dāng)前列為自動增長列列林,由DBMS分配該列的值瑞你,可以保證不重復(fù)
CREATE TABLE t_user(
? ? id INT PRIMARY KEY AUTO_INCREMENT, -- 編號
? ? userName VARCHAR(20),-- 用戶名
? ? birthday DATE,-- 生日
? ? tel CHAR(11),-- 電話
? ? -- 枚舉類型,該列的值只能取男和女
? ? sex ENUM('男','女'),
? ? -- 性別 -- 最后一列不能加“希痴,”者甲。
? ? money INT -- 賬戶余額
);
2.添加行(新增記錄)
①如果添加多條信息,中間用","分割砌创。VALUES只用寫一次虏缸,寫在表頭和表值之間。
②如果列名和列的值不寫嫩实,則默認添加為空(null)刽辙,如果數(shù)據(jù)庫設(shè)計時存在默認值,則為添加默認值甲献≡诅停——2019/11/09更新,感謝評論糾正晃洒。
INSERT INTO t_user(表頭1慨灭,表頭2) values(值1,值2)球及;
例如:
INSERT INTO t_user(userName,pwd,birthday,tel,sex,money)
VALUES ('張無忌','123','1980-05-09','13948577789','男',2000);
例如:
INSERT INTO t_student(userName,pwd,birthday,tel,sex)
VALUES('張勇','111','1998-01-01','13112341234','男');
3.添加列(維護常用)
-- t_student:表名氧骤;address:表頭。
ALTER TABLE t_student ADD address VARCHAR(50);
三吃引、刪除
1.刪除表
-- t_user:表名
DROP TABLE t_user;
2.刪除列
-- t_student:表名筹陵;userAddress:列名
ALTER TABLE t_student DROP COLUMN userAddress;
3.刪除行(記錄)
-- 如果不加where 后面的條件則全部刪除。
DELETE FROM t_user WHERE id=2;
四际歼、修改
1、修改列
修改列的值必須與修改后的類型相符姑蓝,如果修改列的值為null鹅心,則可以改為任意類型。如果修改列的值類型為varchar纺荧,最長為20旭愧,則修改后的類型必須為char類型颅筋,長度不能低于20。
ALTER TABLE t_student CHANGE address userAddress VARCHAR(100);
2输枯、修改值
UPDATE t_product SET 修改列名=修改后新值 WHERE id=1;
-- 修改议泵,將張無忌的密碼修改為333,工資修改為2500
UPDATE t_user SET pwd='333',money='2500' WHERE userName='張無忌';
五桃熄、查詢
1先口、查詢表中所有數(shù)據(jù)
?*表示顯示所有的列,也可以指定顯示列的列表瞳收,中間用","分割碉京。
SELECT * FROM t_user;
-- 例如(顯示姓名和工資列):
select userName,money from t_user
2、查詢返回限定行
第一個參數(shù)為起始記錄數(shù)螟深,從0開始谐宙,第二個參數(shù)為顯示記錄數(shù)
-- MySQL語法
SELECT * FROM t_student LIMIT 0,3;
3、查詢空值null
null不能用=界弧,只能用is null 或 is not null
SELECT *FROM t_student WHERE money IS NULL;
4凡蜻、查詢多條信息(or/in)
-- 查詢張三和李四的信息
SELECT * FROM t_student WHERE userName='張三' OR userName='李四';
SELECT * FROM t_student WHERE userName IN('張三','李四');
5、模糊查詢(_或%)
-- 查詢姓李的二個字的員工
SELECT * FROM t_student WHERE userName LIKE '李_';
-- 查詢出所有商品名包括“糕”的商品的信息
SELECT * FROM t_product WHERE productName LIKE '%糕%';
6垢箕、查詢多條件+顯示部分(LIMIT)
-- 查詢前5條價格在100-1000的酒類商品 (MySQL語法)
SELECT * FROM t_product WHERE productType='酒類' AND price>=100 AND price<=1000 LIMIT 0,5 ;
7划栓、查詢?nèi)コ貜?fù)的類名(distinct)
-- 查詢所有的性別,distinct 表示去除重復(fù)記錄
SELECT DISTINCT sex FROM t_student;
8舰讹、查詢排序顯示(ORDER BY)
-- 按員工工資排序茅姜,默認為升序ASC,降序需要加上DESC月匣。
-- 工資相同钻洒,按年齡大小排序。
SELECT * FROM t_student ORDER BY money DESC,birthday;
9锄开、查詢當(dāng)前日期
select curdate() from 表名
六素标、判斷語句
1、單分支條件判斷
if(條件萍悴,返回值1头遭,返回值2)
-- 例如:
select s.*,if(grade>=60,'合格','不合格')appraise from t_students;
2、多分支條件判斷
(case
when 條件1 then 返回值1
when 條件2 then 返回值2
else 返回值3 END)
-- 例子1(選擇顯示):
SELECT p.*,(CASE
? ? ? ? ? ? WHEN money<5000 THEN '低薪階層'
? ? ? ? ? ? WHEN money>=5000 AND money<=10000 THEN '中薪階層'
? ? ? ? ? ? WHEN money>10000 THEN '高薪階層'
? ? ? ? ? ? ELSE '實習(xí)生' END) grade FROM t_student p;
-- 例子2(選擇添加):
UPDATE t_product SET price =price+(CASE
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHEN productType='藥品類' THEN 5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHEN productType='食品類' THEN 2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHEN productType='酒類' THEN 100 END);
七癣诱、聚合函數(shù)的運用
-- 學(xué)生成績表
CREATE TABLE t_grade(
? ? id INT PRIMARY KEY AUTO_INCREMENT,-- id 主鍵
? ? sname VARCHAR(20),-- 學(xué)生姓名
? ? sex ENUM('男','女'),-- 學(xué)生性別
? ? className VARCHAR(20),-- 學(xué)生班級
? ? grade INT -- 學(xué)生成績
);
a.統(tǒng)計學(xué)生的人數(shù)
-- count(*)只要是記錄都要統(tǒng)計计维。count(列名)只統(tǒng)計非空列。
SELECT COUNT(*) '學(xué)生總?cè)藬?shù)', COUNT(grade)'參考人數(shù)' FROM t_grade;
b.統(tǒng)計學(xué)生的總分撕予、平均分鲫惶、最高分、最低分
-- avg求平均分实抡,也只統(tǒng)計非空列
SELECT SUM(grade) ,AVG(grade),SUM(grade)/COUNT(*), MAX(grade),MIN(grade) FROM t_grade
c.統(tǒng)計每個班的人數(shù)
SELECT className,COUNT(*) num FROM t_grade GROUP BY className;
d.統(tǒng)計每個班的總分和平均分
SELECT className,SUM(grade)'總分',SUM(grade)/COUNT(*) '平均分' FROM t_grade GROUP BY className;
八欠母、having運用
-- 列出班級人數(shù)小于等于3個人的班級
SELECT className,COUNT(*) FROM t_grade GROUP BY className HAVING COUNT(*)<=3;
-- 列出班級總分大于300分的班級
SELECT className,SUM(grade) FROM t_grade GROUP BY className HAVING SUM(grade)>300;
九欢策、復(fù)制表
create table 新表名 select * from 原表名;
十、where與if條件連用
WHERE ?IF(條件, ?true執(zhí)行條件, false執(zhí)行條件 )
select * from sys_user where if(id<10,name='zhangsan',name='lisi')