【資料庫】SQL 語句大全
- 2022 年 3 月 18 日
- 筆記
- 【電腦08組】資料庫
數據操作
SELECT –從資料庫表中檢索數據行和列
INSERT –向資料庫表添加新數據行
DELETE –從資料庫表中刪除數據行
UPDATE –更新資料庫表中的數據
數據定義
CREATE TABLE –創建一個資料庫表
DROP TABLE –從資料庫中刪除表
ALTER TABLE –修改資料庫表結構
CREATE VIEW –創建一個視圖
DROP VIEW –從資料庫中刪除視圖
CREATE INDEX –為資料庫表創建一個索引
DROP INDEX –從資料庫中刪除索引
CREATE PROCEDURE –創建一個存儲過程
DROP PROCEDURE –從資料庫中刪除存儲過程
CREATE TRIGGER –創建一個觸發器
DROP TRIGGER –從資料庫中刪除觸發器
CREATE SCHEMA –向資料庫添加一個新模式
DROP SCHEMA –從資料庫中刪除一個模式
CREATE DOMAIN –創建一個數據值域
ALTER DOMAIN –改變域定義
DROP DOMAIN –從資料庫中刪除一個域
數據控制
GRANT –授予用戶訪問許可權
DENY –拒絕用戶訪問
REVOKE –解除用戶訪問許可權
事務控制
COMMIT –結束當前事務
ROLLBACK –中止當前事務
SET TRANSACTION –定義當前事務數據訪問特徵
程式化SQL
DECLARE –為查詢設定游標
EXPLAN –為查詢描述數據訪問計劃
OPEN –檢索查詢結果打開一個游標
FETCH –檢索一行查詢結果
CLOSE –關閉游標
PREPARE –為動態執行準備 SQL 語句
EXECUTE –動態地執行 SQL 語句
DESCRIBE –描述準備好的查詢
局部變數
declare @id char(10)
–set @id = ‘10010001’
select @id = ‘10010001’
全局變數
—必須以@@開頭
IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字元串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
CASE
use pangu
update employee
set e_wage =
case
when job_level = ‟1‟ then e_wage*1.08
when job_level = ‟2‟ then e_wage*1.07
when job_level = ‟3‟ then e_wage*1.06
else e_wage*1.05
end
WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數 x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數 c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
WAITFOR
--例 等待 1 小時 2 分零 3 秒後才執行 SELECT 語句
waitfor delay ‟01:02:03‟
select * from employee
--例 等到晚上 11 點零 8 分後才執行 SELECT 語句
waitfor time ‟23:08:00‟
select * from employee
SELECT
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
stockname like '[^F-M]%' --------- (^排除指定範圍)
——— 只能在使用 like 關鍵字的 where 子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層 select 只返回一個行的值,
--------- 否則應在外層 where 子句中用一個 in 限定符
select distinct column_name form table_name --------- distinct 指定檢索獨有的列值,
不重複
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連接,table1 中有的而 table2 中沒有得
以 null 表示
table1.id =* table2.id -------- 右外部連接
select stockname from table1
union [all] ----- union合併查詢結果集,all-保留重複行
select stockname from table2
insert
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value 為 select 語句
update
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
delete
delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表
alter table 修改資料庫表結構
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 顯示錶已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default ---- 刪除 Stockname 的
default 約束
function(/*常用函數*/)
統計函數
AVG –求平均值
COUNT –統計數目
MAX –求最大值
MIN –求最小值
SUM –求和
--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
–STDEV()
–STDEV()函數返回表達式中所有數據的標準差
–STDEVP()
–STDEVP()函數返回總體標準差
–VAR()
–VAR()函數返回表達式中所有值的統計變異數
–VARP()
–VARP()函數返回總體變異數
算術函數
/***三角函數***/
SIN(float_expression) –返回以弧度表示的角的正弦
COS(float_expression) –返回以弧度表示的角的餘弦
TAN(float_expression) –返回以弧度表示的角的正切
COT(float_expression) –返回以弧度表示的角的餘切
/***反三角函數***/
ASIN(float_expression) –返回正弦是 FLOAT 值的以弧度表示的角
ACOS(float_expression) –返回餘弦是 FLOAT 值的以弧度表示的角
ATAN(float_expression) –返回正切是 FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
–返回正切是 float_expression1 /float_expres-sion2 的以弧度表示的角
DEGREES(numeric_expression)
–把弧度轉換為角度返回與表達式相同的數據類型可為
–INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) –把角度轉換為弧度返回與表達式相同的數據類型可為
–INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression) –返回表達式的指數值
LOG(float_expression) –返回表達式的自然對數值
LOG10(float_expression)–返回表達式的以 10 為底的對數值
SQRT(float_expression) –返回表達式的平方根
/***取近似值函數***/
CEILING(numeric_expression) –返回>=表達式的最小整數返回的數據類型與表達式相同可為
–INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression) –返回<=表達式的最小整數返回的數據類型與表達式相同可為
–INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression) –返回以 integer_expression 為精度的四捨五入值返回的數據
–類型與表達式相同可為 INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression) –返回表達式的絕對值返回的數據類型與表達式相同可為
–INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression) –測試參數的正負號返回0 零值1 正數或-1 負數返回的數據類型
–與表達式相同可為 INTEGER/MONEY/REAL/FLOAT 類型PI() –返回值為 π 即 3.1415926535897936
RAND([integer_expression]) –用任選的[integer_expression]做種子值得出 0-1 間的隨機浮點數
字元串函數
ASCII() –函數返回字元表達式最左端字元的 ASCII 碼值
CHAR() –函數用於將 ASCII 碼轉換為字元
–如果沒有輸入 0 ~ 255 之間的 ASCII 碼值 CHAR 函數會返回一個 NULL 值
LOWER() –函數把字元串全部轉換為小寫
UPPER() –函數把字元串全部轉換為大寫
STR() –函數把數值型數據轉換為字元型數據
LTRIM() –函數把字元串頭部的空格去掉
RTRIM() –函數把字元串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() –函數返回部分字元串
CHARINDEX(),PATINDEX() –函數返回字元串中某個指定的子串出現的開始位置
SOUNDEX() –函數返回一個四位字元碼
–SOUNDEX函數可用來查找聲音相似的字元串但SOUNDEX函數對數字和漢字均只返回 0 值
DIFFERENCE() –函數返回由 SOUNDEX 函數返回的兩個字元表達式的值的差異
–0 兩個 SOUNDEX 函數返回值的第一個字元不同
–1 兩個 SOUNDEX 函數返回值的第一個字元相同
–2 兩個 SOUNDEX 函數返回值的第一二個字元相同
–3 兩個 SOUNDEX 函數返回值的第一二三個字元相同
–4 兩個 SOUNDEX 函數返回值完全相同
QUOTENAME() –函數返回被特定字元括起來的字元串
/*select quotename(‘abc’, ‘{‘) quotename(‘abc’)
運行結果如下
———————————-{
{abc} [abc]*/
REPLICATE() –函數返回一個重複 character_expression 指定次數的字元串
/*select replicate(‘abc’, 3) replicate( ‘abc’, -2)
運行結果如下
———– ———–
abcabcabc NULL*/
REVERSE() –函數將指定的字元串的字元排列順序顛倒
REPLACE() –函數返回被替換了指定子串的字元串
/*select replace(‘abc123g’, ‘123’, ‘def’)
運行結果如下
———– ———–
abcdefg*/
SPACE() –函數返回一個有指定長度的空白字元串
STUFF() –函數用另一子串替換字元串指定位置長度的子串
數據類型轉換函數
CAST() 函數語法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函數語法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
—————————— ————
199 Jan 15 2000
日期函數
DAY() –函數返回 date_expression 中的日期值
MONTH() –函數返回 date_expression 中的月份值
YEAR() –函數返回 date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
–函數返回指定日期 date 加上指定的額外日期間隔 number 產生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
–函數返回兩個指定日期在 datepart 方面的不同之處
DATENAME(<datepart> , <date>) –函數以字元串的形式返回日期的指定部分
DATEPART(<datepart> , <date>) –函數以整數值的形式返回日期的指定部分
GETDATE() –函數以 DATETIME 的預設格式返回系統當前的日期和時間
系統函數
APP_NAME() –函數返回當前執行的應用程式的名稱
COALESCE() –函數返回眾多表達式中第一個非 NULL 表達式的值
COL_LENGTH(<‘table_name’>, <‘column_name’>) –函數返回表中指定欄位的長度值
COL_NAME(<table_id>, <column_id>) –函數返回表中指定欄位的名稱即列名
DATALENGTH() –函數返回數據表達式的數據的實際長度
DB_ID([‘database_name’]) –函數返回資料庫的編號
DB_NAME(database_id) –函數返回資料庫的名稱
HOST_ID() –函數返回伺服器端電腦的名稱
HOST_NAME() –函數返回伺服器端電腦的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
–IDENTITY() 函數只在 SELECT INTO 語句中使用用於插入一個 identity
column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() –函數判斷所給定的表達式是否為合理日期
ISNULL(<check_expression>, <replacement_value>) –函數將表達式中的 NULL值用指定值替換
ISNUMERIC() –函數判斷所給定的表達式是否為合理的數值
NEWID() –函數返回一個 UNIQUEIDENTIFIER 類型的數值
NULLIF(<expression1>, <expression2>)
–NULLIF 函數在 expression1 與 expression2 相等時返回 NULL 值若不相等時則返回 expression1 的值
常用 SQL 命令和 ASP 編程
在進行資料庫操作時,無非就是添加、刪除、修改,這得設計到一些常用的 SQL語句,如下:
SQL 常用命令使用方法:
(1) 數據記錄篩選:
sql="select * from 數據表 where 欄位名=欄位值 order by 欄位名 [desc]"
sql="select * from 數據表 where 欄位名 like %欄位值% order by 欄位名
[desc]"
sql="select top 10 * from 數據表 where 欄位名 order by 欄位名 [desc]"
sql="select * from 數據表 where 欄位名 in (值 1,值 2,值 3)"
sql="select * from 數據表 where 欄位名 between 值 1 and 值 2"
(2) 更新數據記錄:
sql="update 數據表 set 欄位名=欄位值 where 條件表達式"
sql="update 數據表 set 欄位1=值1,欄位2=值2 …… 欄位 n=值 n where 條件表達式"
(3) 刪除數據記錄:
sql="delete from 數據表 where 條件表達式"
sql="delete from 數據表" (將數據表所有記錄刪除)
(4) 添加數據記錄:
sql="insert into 數據表 (欄位 1,欄位 2,欄位 3 …) valuess (值 1,值 2,值 3 …)"
sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表)
(5) 數據記錄統計函數:
AVG(欄位名) 得出一個表格欄平均值
COUNT(*|欄位名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把數據欄的值相加
引用以上函數的方法:
sql=”select sum(欄位名) as 別名 from 數據表 where 條件表達式”
set rs=conn.excute(sql)
用 rs(“別名”) 獲取統的計值,其它函數運用同上。
(6) 數據表的建立和刪除:
CREATE TABLE 數據表名稱(欄位 1 類型 1(長度),欄位 2 類型 2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數據表名稱 (永久性刪除一個數據表)