查詢:select * from table_name where 條件
查詢的結(jié)果集中使用別名:select 列名 AS 別名 from...辜荠,select 列名=別名 from...汽抚,select 列名 別名 from...
查詢null值和空值: where IS NULL AND 列名=' ' ;
查詢中使用常量列:select userid as 用戶號,'常量列的值' AS 常量列名 from...;
查詢限制返回的行數(shù)和百分比:TOP 10(返回前十行)? 和? TOP 20 PERCENT(返回前百分之二十)SQL:select top 20(pencent) column_name(s) FROM table_name? ?MySQL:select * from table limit 2;? Oracle:select * from table rownom <= 20;
查詢的時候排序:select * from table_name where 列名='條件' ORDER BY 列名 ASC(升序)/DESC(降序)
查詢的時候分組:?select * from table_name where 列名='條件' GROUP BY 列名?
WHERE用于分組錢的條件篩選伯病,? HAVING用于分組后的條件篩選
插入整行數(shù)據(jù):INSERT INTO bookxxb values('值', '值'......)
插入部分列數(shù)據(jù):INSERT INTO bookxxb(列名造烁,列名否过,列名) values ('值','值'惭蟋,'值')
插入多行數(shù)據(jù):INSERT INTO bookxxb values ('值'苗桂,'值'),('值'告组,'值')煤伟,('值','值')
插入多行SELECT結(jié)果集:INSERT INTO bookxxb SELECT 列 FROM Table? UNION? ALL SELECT 列 FROM Table? ? ?【UNION不允許重復(fù)的值木缝,UNION ALL允許重復(fù)的值】
刪除行:DELETE FROM bookxxb WHERE 條件
更新列的值:UPDATE bookxxb SET 列='值'便锨,列='值' WHERE 條件
模糊查詢:
通配符:
?A LIKE 'C_ '? ? ? ? 符合條件的有:Cs, CD等我碟,_只指代一個字符
B LIKE 'co%'? ? ? ?符合條件的有:comst放案,cokr, %包含零個或多個字符的任意字符串
C LIKE 'qwo[0-9]'? ? 符合條件的有:qwo1矫俺,qwo2等吱殉,指定范圍0-9或集合[0123]中的任意
D LIKE 'qwo[^1234]'? ?符合條件的有:qwo5,qwo8厘托, 不在指定范圍內(nèi)的其他
1. 使用LIKE進(jìn)行模糊查詢
SELECT * FROM UserInfo WHERE UserAddress LIKE '%四川%'
2. BETWEEN…AND:查詢兩個已知值之間的未知值
SELECT * FROM OderInfo WHERE OderTime NOT BETWEEN '2012-1-1' AND '2013-1-1'
3. 使用IN在列舉范圍內(nèi)進(jìn)行查詢
SELECT * FROM OderInfo WHERE Payway IN ('網(wǎng)上銀行'考婴,'郵政匯款')
子查詢:
簡單子查詢:
SELECT? * FROM CommodityInfo WHERE SortId = (SELECT SortId FROM CommoditySort WHERE SortName = '手機(jī)數(shù)碼' )
特點:a. 子查詢必須放在括號內(nèi)? b. 子查詢與比較運算符使用時要求子查詢的列只有一個? ? ? ? ? c. ORDER BY 排序不允許放在子查詢中,如果排序只能放在夫查詢中
當(dāng)子查詢返回的列的值為多個時催烘,那么久不能用比較運算符=沥阱,而需要使用IN 或者 NOT IN,關(guān)鍵字DISTINCT可以去掉重復(fù)數(shù)據(jù)伊群,接于SELECT之后考杉,然后再跟列。
ALL, ANY, SOME子查詢:
ALL:在父查詢中列必須大于子查詢返回的每一個值【Table1(2,3), Table2(1,2,3,4)】
SELECT * FROM Table2 WHERE n > ALL(SELECT? n? FROM Table1)? ?返回結(jié)果為4
> ANY:在父查詢列中的值必須大于子查詢返回列表值中的一個,SOME和ANY可互換
SELECT * FROM Table2 WHERE n > ANY (SELECT n FROM Table1)? ?返回3,4
= ANY 與子查詢中IN相同:父查詢的列的值必須在子查詢返回的值列表中
SELECT * FROM Table2 WHERE n = ANY (SELECT n FORM Table1)? ? 返回2,3
SELECT * FROM Table2 WHERE n IN (SELECT n FORM Table1)? ? 返回2,3
<>ANY 與NOT IN 相同:
SELECT * FROM Table2 WHERE n <> ANY (SELECT n FORM Table1)? ? 返回1,4
SELECT * FROM Table2 WHERE n <> ANY (SELECT n FORM Table1)? ??返回1,4
子查詢還可作列作表使用
EXISTS子查詢:
IF EXTSTS(SELECT * FROM OrderInfo WHERE CommodityId IN (SELECT CommodityId FROM CommodityInfo WHERE SortId = (SELECT SortId FROM CommoditySort WHERE SortName = '手機(jī)數(shù)碼')) AND Amount > 3)
BEGIN
UPDATE OrderInfo SET Paymoney = PayMoney * 0.8 WHERE CommodityId IN (SELECT? CommodityId FROM OrderInfo WHERE CommodityId =(SELECT? CommodityId FROM CommodityInfo WHERE SortId = (SELECT SortId FROM CommoditySort WHERE SortName = '手機(jī)數(shù)碼')) AND Amount > 3)
聚合函數(shù):
1. SUM:對列進(jìn)行求和
2. AVG:對列求平均值
3. MAX與MIN:對列求最值
4. COUNT:統(tǒng)計用戶表中用戶數(shù)量
內(nèi)連接查詢:
特點:a.兩個表存在主外鍵關(guān)系? ?b.參與查詢的兩個表地位相同無主次之分
實現(xiàn)方式:a. 使用WHERE語句指定連接條件? ?b.在from子句中使用INNER JOIN...ON
1. WHERE
SELECT OrderInfo.orderId,? UserInfo,UserName, OrderInfo.Amount, OrderInfo.CommdityId FROM OrderInfo, UserInfo? WhERE OrderInfo.UserId = UserInfo.UserId
2. 使用INNER JOIN---ON
SELECT OrderId 舰始,UserName崇棠, O.Amount, CommodityName FROM UserInfo AS U INNER JOIN OrderInfo AS O ON U.UserId = O.UserId
INNER JOIN CommoditiInfo AS C ON O.commodityId = C.CommodityId
外連接查詢:
特點:a.參與外連接的表有主次之分? ?b.以主表的每行數(shù)據(jù)所匹配從表的數(shù)據(jù)列丸卷,將符合條件的數(shù)據(jù)直接返回到結(jié)果集中? c.對那些不符合連接條件的列枕稀,將填上NULL值,后再返回到結(jié)果集中谜嫉。
左外連接:以左表為主萎坷,右邊中沒有匹配的將用NULL值代替
SELECT * FROM CommoditySort(主表) AS S LEFT JION CommodityInfo AS I ON S.SortId = I.SortId
右外連接:以右表為主
SELECT * FROM CommoditySort(主表) AS S RIGHT JION CommodityInfo AS I ON S.SortId = I.SortId
合并查詢:使用UNION合并查詢
字符串函數(shù):
1. CHARINDEX:在一個字符串中查找另一個字符串,如果找到返回位置沐兰,若沒有返回0
SELECT? CHARINDEX? ('zxw', 'www.51zxw.net')? ? ? ? ?——返回7
三個參數(shù)哆档,第一個是要查找的,第二個是源字符串住闯,第三個是開始位置
SELECT CHARINDEX? ('zxw', 'www.51zxw.net', 10)? ? ?——返回0
查詢“江流兒”的郵箱中“@”符號的位置
SELECT CHARINDEX? ('@', Email)? FROM UserInfo? WHERE? UserName = '江流兒'? ? ? ? ? ? (使用CHARINDEX的目的是想把郵箱中用戶名提取出來)
2. LEN:求字符串的長度
SELECT LEN(Email)? FROM UserInfo WHERE UserName = '江流兒'
3. LEFT: 從字符串的左邊截取指定個數(shù)的字符瓜浸。
SELECT LEFT (Email, CHARINDEX('@', Email)-1)? FROM UserInfo WHERE UserName = '江流兒'? ? ? ? ? ——返回@前的字符澳淑。
4. REPLACE:替換一個字符串的字符
SELECT REPLACE('我最喜歡的顏色是白色', '白色','綠色')? ? ?——將白色替換成綠色插佛,如果最后一個是空格杠巡,則將白色刪除
5. STUFF:參數(shù)1是源字符串,參數(shù)2是開始位置雇寇,參數(shù)3是刪除的長度氢拥,參數(shù)4是插入新字符串
SELECT STUFF ('ABCDE', 2, 3, '時間')? ? ——返回A時間E
日期函數(shù):
1. GETDATE:獲取當(dāng)前系統(tǒng)的時間
SELECT GETDATE()? ? ? ——返回系統(tǒng)時間