MySQL第二天--where條件查詢、檢視及函式
阿新 • • 發佈:2019-02-10
//把資料庫匯出到指令碼檔案
mysqldump -uroot -p1234 --databases abc > d:/a/abc.sql //--databases是需要兩個--
Where子句:
Select 欄位 From 表名where 條件 and 條件 or 條件 Update tabletableName set .. Where 條件 Delete from tableName where ….條件查詢:
where關鍵字。(Name=‘dd’ and age=33) or addr=‘BJ’ between X and Y關鍵字。在什麼之間 in關鍵字和not in. In(‘….’,’aafad’,’afasdf’);通過is null判斷是否為null。(要區分空字串與null的區別) CREATE TABLE stud( id INT PRIMARY KEY, NAME VARCHAR(32) NOT NULL, score NUMERIC(4,1) ); //把所有名字都設成"Mike"了 UPDATE stud SET NAME="Mike" //只設置分數>=70的記錄的Name UPDATE stud SET NAME="Exc" WHERE score>=70 //同時修改多個欄位(下面兩種方式都可。欄位值即使不是字元型別,也可以加引號---注意,字元型別的值必須加引號。因此為安全考慮,最好所有的值都加引號--單引號和又引號都可以) UPDATE stud SET NAME="笨蛋",id=5 WHERE score<60 UPDATE stud SET NAME="笨蛋",id='5' WHERE score<60 ※where子句的句型 Select 欄位列表 From 表名 where 條件 and 條件 or 條件 Update table tableName set .. Where 條件 Delete from tableName where …. //查詢分數在[60,80]之間的學生 SELECT * FROM stud WHERE score>=60 AND score<=80; SELECT NAME,score FROM stud WHERE score BETWEEN 60 AND 80; //between子句是包含邊界的 //查詢分類正好是65和85的學生 SELECT * FROM stud WHERE score=65 OR score=85; SELECT * FROM stud WHERE score IN(65,85); //in子句中的值是離散的 //模糊查詢: like 引數: %(任意匹配) _(匹配單字元) SELECT * FROM stud WHERE NAME LIKE '王%'; //姓王的學生 SELECT * FROM stud WHERE NAME LIKE '王_'; //姓王且名為單字的學生 SELECT * FROM stud WHERE NAME LIKE '王__'; //姓王且名為雙字的學生 SELECT * FROM stud WHERE NAME LIKE '%王%';//姓名中包含"王"的學生 //查詢某欄位值為空 SELECT * FROM stud WHERE score IS NULL; //注意,不能用"="號
檢視view:
檢視是儲存在資料庫中的選擇查詢,相當於從一個或多個數據表中派生出來的虛擬表。它兼有查詢和表的雙重功能。 查詢功能:檢視儲存一個完整的SQL查詢命令,相當於給一個查詢起了一個名字。簡化資料查詢和資料處理操作。提高資料的安全性。 表的功能:檢視可以和表一樣使用,即操作表的所有命令都可以使用在檢視中,但是要注意:檢視本身不含有任何資料,每次使用相當於從資料庫表中重新查詢。 建立檢視的示例: •Createviewview_name as select * from stud where id>3;//檢視View ---對檢視的操作能夠時時更新到物理表,只是操作範圍只針對檢視中的進行(效率更高) CREATE VIEW studV AS SELECT * FROM stud WHERE score<60; SELECT NAME FROM studV; UPDATE studV SET score = score*1.1; //該句執行後: 1)如果分數及格則studV檢視中不再包含該資料 2)物理表stud中的資料也更改了。
使用聚合函式:
Count(*)行數量—不包含空行 null avg平均。 Sum求和。 Max最大, Min最小。 Distinct-去除相同的資訊。 Exists存在判斷//聚合函式
SELECT COUNT(*) AS num FROM stud; //統計表中資料的行數
SELECT COUNT(score) AS num FROM stud; //統計score列中非NULL資料行的數量 SELECT AVG(score) AS avgg FROM stud;//統計分數的平均值(不包含score值為null的記錄)
SELECT AVG(score) AS avgg FROM stud WHERE score IS NOT NULL;
SELECT ROUND(AVG(score)) AS avgg FROM stud;//四捨五入,取整
SELECT ROUND(AVG(score),2) AS avgg FROM stud;//四捨五入,保留兩位小數
SELECT SUM(score) AS avgg FROM stud;//求和
SELECT MAX(score) AS avgg FROM stud; //最大值(最高分)
//查詢出最高分學生的資訊
SELECT * FROM stud WHERE score = (SELECT MAX(score) AS avgg FROM stud );
SELECT * FROM stud WHERE score IN( SELECT MAX(score) AS avgg FROM stud );
//查詢有哪些年齡段的學生(顯示有哪些年齡值,即年齡值相同的只顯示一個)---以後的顯示有哪些專業、哪些部門 都用distinct
SELECT DISTINCT age FROM stud;
SELECT DISTINCT age FROM stud ORDER BY age ASC; //升序
SELECT DISTINCT age FROM stud ORDER BY age DESC; //降序
//反模式--以下語句要麼顯示所有記錄,要麼一條也不顯示。因為EXISTS()返回的是同一個結果
SELECT * FROM stud WHERE EXISTS( SELECT * FROM stud WHERE age=25 );
使用group by對資料進行分組:
查詢所有人考試的總分 Select sum(score),name from stud group by name; 查詢考試總分大於50的人:下面使用了別名和having關鍵字。 Select sum(score) as c,name from stud group by name having c>50 Having: Having關鍵字的作用是對已經使用了聚合函式的查詢再進行過慮: 如:根據欄位ID計算數量,然後只選擇資料大於4的記錄: SELECT COUNT(*),func_role FROM func GROUP BY func_role HAVING COUNT(*) >4
//句型: group by... having... ---把各年齡段學生的平均分顯示出來
SELECT AVG(score) 平均分, age FROM stud GROUP BY age;
SELECT AVG(score) 平均分, age FROM stud GROUP BY age HAVING age>20;
SELECT AVG(score) 平均分, age FROM stud GROUP BY age HAVING AVG(score)>=70;
//字串處理函式
Length(str) - 求字串長度
Ltrim(str) - 去掉左邊的空格
Rtrim(str) - 去掉右邊的空格
Left(str,n); - 從左邊取出n個字元
Right(str,n); - 從右邊取出n個字元
Substring(str,begin,len) -返回子串, begin的序號從1開始 ※
Reverse(str) –返回顛倒的字串
Lower(str) - 轉成小寫
Upper(str) - 轉成大寫
Concat(Str,str…..)串聯字串。
Instr(str,s) – 返回s在str中出面的位置,沒有則返回0
SELECT * FROM stud WHERE LENGTH(NAME)>3;
SELECT * FROM stud WHERE LENGTH(LTRIM(NAME))>3;
SELECT SUBSTRING(NAME,1,2) FROM stud;
SELECT * FROM stud WHERE SUBSTRING(NAME,1,1)='王';//顯示姓王的學生