1. 程式人生 > >MySQL第二天--where條件查詢、檢視及函式

MySQL第二天--where條件查詢、檢視及函式

//把資料庫匯出到指令碼檔案
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’);
and和or關鍵字。 使用like實現模糊查詢。%
通過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)='王';//顯示姓王的學生