1. 程式人生 > 其它 >MYSQL--第一和第二章筆記

MYSQL--第一和第二章筆記

  • # 1、查詢語句
  • # 格式 SELECT 列明 FROM 表名;
  • SELECT * FROM student;# *:表示所有列。
  • SELECT name,number,score FROM student;# 查詢name列和number以及score列
  • # 不同列名之間用逗號(,)隔開。
  • # 2、註釋
  • # 第一種:單行註釋:#註釋文字(MYSQL特有的方式)
  • # 第二種:單行註釋:-- 註釋文字(--後面必須含有一個空格)
  • # 第三種:多行註釋:/* 註釋內容 */
  • # 3、基本規則
  • # A、SQL語句可以寫在一行或者多行。為了提高可讀性,各子句分行寫,必要時使用縮減
  • SELECT name,score
  • FROM student;
  • # B、每條命令以;或\g或\G結束
  • # C、關鍵字不能被縮寫也不能分行寫
  • # D、標點符號:
  • /* a、必須保證所有的()、單引號、雙引號是成對結束的
  • b、必須使用英文狀態下的半形輸入方式
  • c、字串型和日期時間型別的資料可以使用單引號('')表示
  • d、列的別名,儘量使用雙引號(""),而且不建議省略AS
  • e、MYSQL在windows環境下對大小寫不敏感,就是對大小寫區分的不明顯
  • f、MYSQL在Linux環境下對大小寫敏感
  • g、資料庫名、表名、表別名、欄位名、欄位別名等都小寫(建議遵守)
  • h、SQL關鍵字、函式名、繫結變數等都大寫(建議遵守)
  • */
  • # 4、基本的SELECT語句(查詢語句)
  • # SELECT 欄位1,欄位2.... FROM 表名
  • # 查詢一些運算(DUAL表示偽表)
  • SELECT 1+1,3*2 FROM DUAL;
  • # 5、列的別名 UTF-8支援中文
  • # 1、方式一: SELECT 原列名1 別名1,原列名2 別名2..... FROM 表名
  • # 雙引號可加可不加,建議加好區分,不能用單引號!
  • # 如果別名中間有空格就要加雙引號,不然別名是空格前面的
  • SELECT number "學號",name "名字",score "成績" FROM student;
  • # 2、方式二:SELECT 原列名1 AS 別名1,原列名2 AS 別名2... FROM 表名;
  • SELECT number AS "學號",name AS "名字",score AS "成績" FROM student;
  • SELECT name,score * 7 AS "score week" FROM student;
  • # 6、去除重複行--- 用關鍵詞DISTINCT
  • SELECT DISTINCT score FROM student;
  • # 錯誤案例:
  • #SELECT name,DISTINCT score FROM student;# 會報錯
  • SELECT DISTINCT name,score FROM student;#對name和score的組合內容不重複輸出
  • # 7、空值(NULL)參與運算,一定也是空值null
  • # null不等同於0和'','null'。null表示未知,0和其他表示是已知,確定的。
  • #IFNULL:如果是null空值就當0處理
  • SELECT name,IFNULL(score,0) * 7 AS "score_week" FROM student;
  • # 8、著重號(``),不是單引號!
  • # 如果表名或者列名和關鍵字重複,要用``括起來區分,如果不重複也可以使用
  • # 9、查詢常數,用單引號引起來
  • SELECT '太科大' AS "學校",name,score,sex FROM student;
  • SELECT '666999' AS "號碼",name,score FROM student;
  • # 10、顯示錶結構---DESCRIBE或者縮寫DESC
  • # 顯示錶中欄位的詳細資訊!
  • DESCRIBE student;
  • DESC student;
  • # 11、過濾資料---WHERE 列名 = 過濾條件;---要求寫在FROM後面;
  • SELECT * FROM student WHERE score = 100;
  • SELECT * FROM student WHERE sex = '女';
  • # 1、算術運算子
  • # 如:加法:+ 減法:- 乘法:* 除法:/或div 取餘:%或mod
  • # 如果不滿足運算條件(分母為0...),結果為null
  • SELECT 100,100 + 2.0,100 - 4,100 * 3.7,100 DIV 25,100 / 0,100 % 3 FROM DUAL;
  • # 在SQL中,+沒有連線作用,就表示加法運算,會將字串轉換為數值。(隱式轉換)
  • SELECT 100 + '1' FROM DUAL;# 在Java輸出:1001,但在sql輸出:101
  • SELECT 100 + 'a' FROM DUAL;# 不能轉換的字串看成0來處理,輸出:100
  • SELECT 100 + NULL FROM DUAL; #空值參與運算結果為:null
  • # 取餘運算子的運算結果與%號前面的數的正負號有關與後面的正負無關!
  • SELECT 12 % 5,12 % -5,-12 % 5,-12 % -5 FROM DUAL;
  • # 2、比較運算子
  • # 比較運算子用於對錶達式左邊的運算元和右邊的運算元進行比較
  • # 比較結果為真則返回1,比較結果為假則返回0,其他情況返回null
  • # 運算子:等於:= 安全等於:<=> 不等於:<>或!= 小於:< 小於等於:<= 大於:> 大於等於:>=
  • SELECT 1 = 2,1 <=> 2,1 != 2,1 <> 2,1 < 2,1 <= 2,1 > 2,1 >= 2 FROM DUAL;
  • # 如果字串不能隱式轉換成數值就把字串看成0。如果兩邊都是字串,用ANSI編碼比較
  • SELECT 1 = '1',1 = 'A','a' = 'a','a' = 'ab',0 = 'a' FROM DUAL;
  • # 只要有null參與運算,結果就是null
  • SELECT 1 = NULL,NULL = NULL FROM DUAL;
  • # 安全等於<=>:可以對null進行判斷,為null而生的比較運算子。其他運算和普通等於沒區別
  • SELECT 1 <=> '1',1 <=> 'A','a' <=> 'a','a' <=> 'ab',0 <=> 'a' FROM DUAL;
  • SELECT 1 <=> NULL,NULL <=> NULL;
  • SELECT 1 <> NULL,3 <> 2,'1' <> 1 FROM DUAL;
  • # 1、一些關鍵字
  • # is NULL和is not NULL、isnull()
  • # IS NULL和<=> NULL一個意思,判斷是null
  • SELECT name FROM student WHERE name IS NULL;
  • # IS NOT NULL判斷不是null
  • SELECT name FROM student WHERE name IS NOT NULL;
  • # ISNULL()判斷是null,更像是函式把要判斷的放入括號中,只能放一個列名
  • SELECT name FROM student WHERE ISNULL(score);
  • # WHERE NOT 列名 <=> NULL;不是null的另一種表示
  • SELECT name FROM student WHERE NOT name <=> NULL;
  • # 取最小:LEAST(字串1,字串2,...);字串就是比較ascll碼值吧
  • SELECT LEAST(1,2,3,-2,0) FROM DUAL;
  • SELECT LEAST('A','b','v') FROM DUAL;
  • # 先比第一個字母,誰打輸出誰,如果第一個一樣,就比第二個,以此類推。。。
  • SELECT LEAST('aba','ad') FROM DUAL;
  • SELECT LEAST('adc',36,'蔡徐坤') FROM DUAL;
  • # 取最大:GREATEST(value1,value2,...);和least同理
  • # LENGTH(str);取字串str的長度
  • SELECT LENGTH(name) FROM student;
  • # BETWEEN 條件1 AND 條件2:
  • # 取條件1和條件2範圍內的資料,包括條件1和條件2,同時條件1是下限,條件2是上限,否則報錯
  • SELECT name,score FROM student WHERE score BETWEEN 90 AND 100;
  • # 如果不在條件範圍內:NOT BETWEEN 條件1 AND 條件2
  • SELECT name,score FROM student WHERE score NOT BETWEEN 90 AND 100;
  • # IN()和not IN()
  • # IN():列名下的資料是括號裡的資料的,有點像集合大括號裡面那個
  • SELECT name,score FROM student WHERE score IN(91,92);
  • # NOT IN():與in相反
  • SELECT name,score FROM student WHERE name NOT IN('張三','王五');-- 引用字串要加單引號!
  • # LIKE:模糊查詢
  • # %表示有n個字元,_表示一個字元
  • # 以蔡開頭的:
  • SELECT name,score FROM student WHERE name LIKE '蔡%';
  • # 有四字元的:
  • SELECT name,score FROM student WHERE name LIKE '%四%';
  • # 第三個字元是坤的:
  • SELECT name,score FROM student WHERE name LIKE '__坤';
  • # 查詢包含a和e的:
  • # 方式一:
  • # SELECT name,score FROM student WHERE name LIKE '%a%' AND '%e%';
  • # 方式二:
  • # SELECT name,score FROM student WHERE name LIKE '%a%e%' OR '%e%a%';
  • # 如果查詢的內容有下劃線_或取餘%,要用轉義字元\_或\%
  • # 邏輯運算子:
  • # 邏輯非:NOT或! 邏輯與:AND或&& 邏輯或:OR或|| 邏輯異或:XOR
  • # 邏輯非:NOT或!,表示取反
  • SELECT name,score FROM student WHERE NOT score = 100;
  • SELECT name,score FROM student WHERE score != 100;
  • # 邏輯與:AND或&&,表示都要滿足才行
  • SELECT name,score FROM student WHERE score < 93 && score > 90;
  • SELECT name,score FROM student WHERE score < 93 AND score > 90;
  • # 邏輯或:OR或||,表示滿足其中一個即可
  • SELECT name,score FROM student WHERE score > 91 OR score < 90;
  • SELECT name,score FROM student WHERE score > 91 || score < 90;
  • # 邏輯異或:XOR,表示滿足一個不滿足另一個
  • SELECT name,score FROM student WHERE score < 95 XOR name LIKE '%徐%';
  • # 注意:OR可以和AND一起使用,但是在使用時要注意兩者的優先順序,
  • # 由於AND的優先順序高於OR,因此先對AND兩邊進行判斷在對OR兩邊的進行判斷!
  • # 位運算子:一般用於擴容(瞭解)
  • # 按位右移:>> 按位左移:<< 按位與:& 按位或:| 按位異或:^ 按位取反:~
  • # 一定範圍內:左移一位:相當於*2 右移一位:相當於/2