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