mysql中有4類運算符,它們是:

成都創新互聯是一家專業提供鶴崗企業網站建設,專注與網站制作、成都做網站、H5頁面制作、小程序制作等業務。10年已為鶴崗眾多企業、政府機構等服務。創新互聯專業網站設計公司優惠進行中。
算術運算符
比較運算符
邏輯運算符
位操作運算符
算術操作符
算術操作符是SQL中最基本的操作運算符,主要有一下幾種運算符:
+(加)、 -(減)、 *(乘)、 /(除)、 %(求余或者模)
比較運算符
一個比較運算符的結果總是1,0或者是NULL。MySQL中的比較運算符有:
=、=、 (!=)、=、=、、IS NULL、IS NOT NULL、LEAST、GREATEST、BETWEEN . . . AND. . . 、ISNULL、IN、NOT IN、LIKE、REGEXP
邏輯運算符
邏輯運算符的求值所得結果均為TRUE、FALSE或NULL。
邏輯運算符有:
NOT 或者 !
AND 或者
OR 或者 ||
XOR(異或)
位運算符
位運算符是用來對二進制字節中的位進行測試、移位或者測試處理。位運算符有:
位或(|)
位與()
位異或(^ )
位左移()
位右移()
位取反(~)
首先你得告訴我,你的正序條件是什么!比如說你的正序條件是name這個字段,也就是說,name字段進行正序排列,如果name字段存儲的數據分別為aaa,bbb,ccc。那么按照name字段正序排列的話sql語句就是這樣的:select * from xxx order by name asc
如果按照name反向排列的話就是這樣的:select * from xxx order by name desc
在MySQL中 select 表示查詢,select可以單獨成句,是MySQL的方言
比如查詢系統時間: select now();
now() 表示當前系統時間 MySQL特有的一個方法
在Oracle中系統時間: select sysdate from dual; 是Oracle的方言
dual表時Oracle特有的一張表,主要目的就是為了補充SQL語句中的from**
在Oracle的語法中,select之后必須要有from
MySQL中有DUAL關鍵字,所以SELECT NOW()也可以寫作SELECT NOW() FROM DUAL;
但MySQL中的DUAL不是表 執行SELECT * FROM DUAL;會報錯,而Oracle中DUAL是一張實際存在的表,執行SELECT * FROM DUAL;會查詢一個叫做DUMMY的結果
標準語法:select...from...
語法格式:
開發中建議以查詢特定列的方式進行查詢,前者的執行效率更快
示例1:查詢員工編號,員工姓名,年薪 (sal表示的是月薪)
注意年薪的表頭顯示的是“sal*12”
可以使用as或者空格,為查詢結果的列起別名
或
當數據運算中出現null值時,結果一定是null
MySQL解決問題是用ifnull()函數
Oracle解決問題是用nvl()函數
ifnull(expr1,expr2)
nvl(expr1,expr2)
當expr1的結果是null時,使用expr2的結果
當expr1的結果不是null時,使用expr1的結果
示例2: 查詢員工姓名和員工的月收入(月薪+獎金)
此時原始數據中如果comm中有null值,查詢結果不正確
使用distinct去掉查詢結果中的重復記錄
基礎語法
查詢列1,列2直至列n的數據,并去掉其中重復的組合
select ... from...where 查詢條件
示例3:查詢所有在部門編號是1工作的員工記錄
的查詢結果是一樣的,數據中Tom,tom,TOM,tOm...等都會被查詢出
如果需要嚴格控制大小寫字母敏感,查詢語句需要在列前加 binary
這樣只能查詢出TOM
X AND Y 必須同時滿足條件X和條件Y
示例4: 查詢在1號部門工作,且月薪不低于2500的員工信息
示例5: 查詢在1號部門工作,且月薪不低于2500的保潔信息
X OR Y 滿足條件X或條件Y其一即可
示例6:查詢在1號部門或2號部門工作的員工信息
NOT(X) 不是條件X
主要使用在特殊的比較運算符中
AND語句的優先級高于OR
如果使用括號控制優先級
SQL注入問題:利用了AND和OR優先級破壞系統中的SQL語句邏輯
正常訪問邏輯,用戶輸入admin和123 正確賬號和密碼可以登錄
SQL注入通過輸入正確的賬號,和一個帶有or邏輯的SQL片段將原來邏輯破壞掉,進行非法登錄
輸入的是 賬號:admin 密碼:' OR 1=1 AND lname='admin
這個SQL語句就變成了
lname = 'admin' AND lpass = '' -- X 假 查不出結果
1=1 AND lname='admin' -- Y 真 查出admin的數據
X OR Y -- 真 驗證通過 訪問了admin的賬號
X between A and B 表示X在[A,B]之間
相當于 X = A and X = B
一般情況下: B應該大于等于A
如果B小于A語法也沒錯誤,邏輯上沖突,不會由查詢結果
示例1:查詢月薪在[2000,2500]區間的員工信息
示例2:查詢在20號部門入職日期在1994年的員工信息
用于查詢數據時進行模糊匹配(模糊查詢),只適用于文本查詢
語法規則
-ename中含有字符% 使用\做為轉義字符
將'%'看做一個%字符
MySQL中
Oracle中
相當于or
語法規則
相當于
示例3:查詢在10號部門或20部門工作,且職位是CLERK的員工信息
示例4:查詢員工SMITH和AMY的員工信息
示例5:查詢在'1992-01-15'或'1994-12-22'或'1994-07-05'入職的員工信息
如果in中的數據有null值,null值不會被查詢出
專門針對null值進行篩選
示例6: 查詢所有獎金是null的員工信息
不能使用comm = null查詢,這樣查詢沒有結果
not表示特殊比較運算符邏輯取反
示例7:查詢月薪 不 在[2000,2500]區間的員工信息
示例8:查詢員工名字中 不 包含字母A的員工信息
示例9:查詢 不 在10號或20號部門工作的,職位是CLERK的員工信息
示例10:查詢獎金 不 是null的員工信息
排序是對 查詢結果 進行排序顯示
排序規則
select...from...where... order by...
示例11:查詢所有的員工信息,按照月薪升序排序。
asc表示升序,排序默認就是升序,asc可以省略。
示例12:查詢所有的員工信息,按照月薪降序排序。
desc表示降序
在列1的排序基礎上,進行列2排序,.... 在之前所有排序基礎上進行列n的排序
示例13 : 查詢所有員工信息,按照部門編號升序排序,按照月薪降序排序
先按照deptno進行升序排序,在deptno排序的基礎上,再進行sal的降序排序
示例14:查詢20號部門員工姓名,月薪,獎金,月收入,按照月收入的降序排序
可以使用列別名
按照查詢結果的第3列進行升序排序,在排序基礎上以第2列進行降序排序
實際:deptno升序后,sal降序
編寫順序: select...from...where...order by...
執行順序: from...where...select...order by...
今天主要復習了MySQL的一些簡單語句,可總結:
mysql 統計 表的數量:SELECT COUNT(1) FROM information_schema.TABLES WHERE TABLE_SCHEMA = '你的數據庫';
有時候需要查詢MySQL數據庫中各個表大小,該如何操作呢?
MySQL中有一個名為 information_schema 的數據庫,在該庫中有一個 TABLES 表,這個表主要字段分別是:
TABLE_SCHEMA : 數據庫名
TABLE_NAME:表名
ENGINE:所使用的存儲引擎
TABLES_ROWS:記錄數
DATA_LENGTH:數據大小
INDEX_LENGTH:索引大小
use information_schema;
SELECT
TABLE_NAME,
(DATA_LENGTH/1024/1024) as DataM ,
(INDEX_LENGTH/1024/1024) as IndexM,
((DATA_LENGTH+INDEX_LENGTH)/1024/1024) as AllM,
TABLE_ROWS
FROM
TABLES
WHERE
TABLE_SCHEMA = '你的數據庫';
MySQL的一些基礎語句:
行是記錄 列是字段
創建庫
CREATE DATABASE [IF NOT EXISTS] 數據庫名 [參數[ 參數] [ 參數]...];
參數:
CHARACTER SET 碼表名
COLLATE 校對規則名, 詳見文檔10.10.1
顯示庫
SHOW DATABASES;
顯示數據庫創建語句
SHOW CREATE DATABASE 數據庫名;
修改庫
ALTER DATABASE 數據庫名[ 參數[ 參數][ 參數]...];
注意: 不能改數據庫的名字
刪除庫
DROP DATABASE [IF EXISTS] 數據庫名;
操作表之前使用需要先確定使用哪個數據庫
USE 數據庫名
創建表
CREATE TABLE 表名(列名 類型[,列名 類型][,列名 類型]...);
查看所有表
SHOW TABLES;
查看表的創建語句
SHOW CREATE TABLE 表名;
顯示表結構
DESC 表名;
修改表名
RENAME TABLE 原表名 TO 新表名;
修改字符集
ALTER TABLE 表名 CHARACTER SET 字符集名;
刪除表
DROP TABLE 表名;
追加列
ALTER TABLE 表名 ADD 列名 類型[,列名 類型][,列名 類型]...;
修改列類型
ALTER TABLE 表名 MODIFY 列名 類型[,列名 類型][,列名 類型]...;
修改列
ALTER TABLE 表名 CHANGE COLUMN 原列名 新列名 類型;
刪除列
ALTER TABLE 表名 DROP 列名;
插入語法:
INSERT INTO 表名[(列名[,列名]...)] VALUES(值[,值]...);
注意事項:
插入值類型必須與對應列的數據類型一致
數據不能超出長度
插入值得為之必須與列名順序一致
字符和日期數據要放在單引號中
插入空值使用null
如果不指定插入哪一列, 就是插入所有列
中文數據
由于默認碼表是utf8, 而cmd.exe的碼表是gbk, 在插入中文數據的時候會報錯, 所以我們需要修改客戶端碼表
先查看系統變量: SHOW VARIABLES LIKE 'character%';
修改客戶端碼表: SET character_set_client=gbk;
修改輸出數據的碼表: SET character_set_results=gbk;
修改語法
UPDATE 表名 SET 列名=值[,列名=值]...[WHERE 條件語句];
注意事項
WHERE子句選擇滿足條件的行進行更新, 如果不寫, 則更新所有行
刪除語法
DELETE FROM 表名 [where 條件語句]
注意事項
如果不加where子句, 將刪除表中所有記錄
delete只能用作刪除行, 不能刪除某一列的值, 需要用update
在delete和update的時候需要注意表與表之間的關聯關系
刪除表中所有數據可以使用: TRANCATE 表名, 這種方式會刪除舊表重新創建, 在數據較多的時候使用
備份數據庫
輸入quit退出mysql, 在cmd.exe中輸入:
mysqldump –u用戶名 –p密碼 數據庫名 文件名
恢復數據庫
進入mysql.exe之后, 使用數據庫之后
source 文件名
操作數據(查詢)
DISTINCT語法
SELECT [DISTINCT] 列名[, 列名]... FROM 表名
注意事項
*可以替代列名, 表示所有列, 但是通常我們為了提高代碼的可讀性, 不使用*
DISTINCT為過濾重復記錄
如果DISTINCT后面跟多列, 是過濾掉多列合并之后的重復
列名表達式——語法
SELECT 列名|表達式[,列名|表達式]... FROM 表名
注意事項
表達式只是顯示時起作用, 不會改變數據庫中的值
AS——
SELECT 列名 AS 別名 FROM 表名
注意事項
起別名時AS可以省略
不會改變數據庫中的值
WHERE——
語法
SELECT 列名 FROM 表名 [WHERE 條件語句]
WHERE子句中的運算符
比較運算符
, , =, =, =,
注意不等于和Java中不同, 是
BETWEEN ... AND ...
某一區間內的值, 從 ... 到 ...
IN(列表)
在列表之中, 例: in(1,2,3) 代表1或2或3
LIKE(表達式)
模糊查詢, %代表多個字符, _代表單個字符
IS NULL
判斷是否為NULL
邏輯運算符
AND
與, 兩邊都為TRUE結果為TRUE
OR ||
或, 一邊為TRUE結果就為TRUE
NOT !
非, 將表達式結果取反
ORDER BY——
語法
SELECT 列名 FROM 表名 ORDER BY 列名 ASC|DESC;
注意事項
ORDER BY 指定排序的列名可以是表中的列名, 也可以是SELECT語句后面起的別名
ASC為升序, DESC為降序
ORDER BY應在查詢語句的結尾
COUNT函數——
語法
SELECT COUNT(*)|COUNT(列名) from 表名 [WHERE 條件語句]
注意事項
COUNT(列名)的方式是統計指定列中有多少條記錄, 不包括值為NULL的
COUNT(*)則是統計表中有多少條數據
COUNT(DISTINCT 列名) 統計不重復的記錄數
如果加上WHERE子句, 則是統計滿足條件的記錄
在第六章介紹的所有 WHERE 子句在過濾時,使用的都是單一的條件。為了進行更強的過濾控制,MySQL允許給出多個WHERE子句,并通過 AND 或 OR 操作符的方式組合使用。
AND 操作符可以使用對多列的條件進行累加過濾。
OR操作符可以使用對多列的條件進行累加過濾。
WHERE 子句可包含任意數目的 AND 和 OR 操作符。但是 AND 的優先級比 OR 高,應使用適當的圓括號分組操作符。
注意: 任何時候都不應該過分依賴默認計算次序,使用圓括號可以增加可讀性,消除歧義。
IN 操作符用來指定條件范圍,范圍中每個條件都可以進行匹配。 IN 的合法值由逗號分隔,并全部括在圓括號中。
使用 IN 的優點為:
WHERE子句中的NOT操作符有且只有一個功能,就是否定它之后的任何條件。
注意: MySQL支持使用NOT對IN、BETWEEN和EXISTS子句取反,這與其他大多數DBMS允許使用NOT對各種條件取反有很大區別。
之前介紹的都是針對已知值的過濾。而對進行未知內容的匹配,可以使用通配符創建比較數據的搜索模式來完成。通配符的匹配,需要通過LIKE操作符指示MySQL完成。
% 表示任何字符出現任意次。例如,為了找到所有以 jet 起頭的產品,可使用以下 SELECT 語句
注意:
下劃線( _ )通配符只匹配單個字符而不是多個字符。
通配符使用技巧:
正則表達式是用來匹配文本的特殊串(字符集合),所有種類的程序設計語言、文本編輯器、操作系統等都支持正則表達式。
MySQL中的正則表達式僅是正則表達式的一個子集。
為搜索兩個串之一,使用( | )。
如果想匹配特定的單一字符,可以使用[]將一組指定的內容括起來。
注意:
集合可用來定義要匹配一個或多個字符,此時可以使用 - 來定義一個范圍,例如 [0-9] 表示數字0到9, [a-z] 表示字母a到z。
正則表達式語句由具有特定含義的特殊字符構成。例如 | 或 - 等。如果要表示一些特殊的字母,如含 . 的值,則應該使用 \\\ 為前導。 \\\- 表示查找 - , \\\. 表示查找 . 。
注意:
為方便常見字符集的查找,可以使用預定義的字符集。稱為字符類。如下圖所示:
目前為止使用的所有正則表達式都試圖匹配單詞出現。但有時需要對匹配的數目進行更強的控制,此時可以使用下列正則表達式重復元字符來完成。
注意: 使用正則表達式時,編寫某個特定的表達式幾乎總是有多種方法。
目前為止,所有例子都是匹配一個串中任意位置的文本,為了匹配特定位置的文本,需要使用定位符。
注意:
                網站名稱:mysql查詢怎么取反 mysql 取反
                
                當前地址:http://www.yijiale78.com/article8/doddgop.html
            
成都網站建設公司_創新互聯,為您提供建站公司、網站建設、網站制作、外貿網站建設、企業建站、靜態網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯