您好,登錄后才能下訂單哦!
可以把 SQL 分為兩個(gè)部分:數(shù)據(jù)操作語(yǔ)言 (DML) 和 數(shù)據(jù)定義語(yǔ)言 (DDL)。
SQL (結(jié)構(gòu)化查詢(xún)語(yǔ)言)是用于執(zhí)行查詢(xún)的語(yǔ)法。但是 SQL 語(yǔ)言也包含用于更新、插入和刪除記錄的語(yǔ)法。
查詢(xún)和更新指令構(gòu)成了 SQL 的 DML 部分:
?SELECT?- 從數(shù)據(jù)庫(kù)表中獲取數(shù)據(jù)
?UPDATE?- 更新數(shù)據(jù)庫(kù)表中的數(shù)據(jù)
?DELETE?- 從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)
?INSERT INTO?- 向數(shù)據(jù)庫(kù)表中插入數(shù)據(jù)
SQL 的數(shù)據(jù)定義語(yǔ)言 (DDL) 部分使我們有能力創(chuàng)建或刪除表格。我們也可以定義索引(鍵),規(guī)定表之間的鏈接,以及施加表間的約束。
SQL 中最重要的 DDL 語(yǔ)句:
?CREATE DATABASE?- 創(chuàng)建新數(shù)據(jù)庫(kù)
?ALTER DATABASE?- 修改數(shù)據(jù)庫(kù)
?CREATE TABLE?- 創(chuàng)建新表
?ALTER TABLE?- 變更(改變)數(shù)據(jù)庫(kù)表
?DROP TABLE?- 刪除表
?CREATE INDEX?- 創(chuàng)建索引(搜索鍵)
?DROP INDEX?- 刪除索引
use test
create table Persons(
Id int primary key,
Name varchar(14) not null,
Sex varchar(13) not null,
Address varchar(20) not null,
City varchar(20) not null
)
insert into Persons values(1,'張三','男','廣東茂名','廣東');
insert into Persons values(2,'李四','男','浙江杭州','浙江');
insert into Persons values(3,'王五','女','北京五環(huán)','北京');
insert into Persons values(4,'小小','女','上海浦東','上海');
select * from Persons
語(yǔ)法:
SELECT 列名稱(chēng) FROM 表名稱(chēng)
?查看某列數(shù)據(jù)
select Name from Persons
?可以查詢(xún)多列用“,”隔開(kāi)
select Name,Sex from Persons
select * from sysdatabases; #查看所以庫(kù) (*代表所有)
use tongji #切換tongji庫(kù)
select * from sys.tables #查看所有表
?查看schema,user的存儲(chǔ)過(guò)程
SELECT * FROM SYS.DATABASE_PRINCIPALS
SELECT * FROM SYS.SCHEMAS
SELECT * FROM SYS.SERVER_PRINCIPALS
?查看DEPT表所有內(nèi)容
select * from DEPT
?查看DEPT表中deptno為101的內(nèi)容
select * from DEPT where deptno='101';
?select distinct語(yǔ)句
關(guān)鍵詞 DISTINCT 用于返回唯一不同的值
語(yǔ)法:
SELECT DISTINCT 列名稱(chēng) FROM 表名稱(chēng)
select distinct Name,Sex from Persons
SQL SELECT INTO----可用于創(chuàng)建表的備份文件
SQL SELECT INTO 語(yǔ)法
您可以把所有的列插入新表:
SELECT * INTO new_table_name [IN externaldatabase]
FROM old_tablename
或者只把希望的列插入新表:
SELECT column_name(s) INTO new_table_name [IN externaldatabase]
FROM old_tablename
?制作 "Persons" 表的備份復(fù)件
select * into Persons_backup from Persons;
子句可用于向另一個(gè)數(shù)據(jù)庫(kù)中拷貝表:
SELECT *INTO Persons IN 'Backup.mdb'
FROM Persons
如果我們希望拷貝某些域,可以在 SELECT 語(yǔ)句后列出這些域:
SELECT LastName,FirstNameINTO Persons_backup
FROM Persons
use master
create database test
?創(chuàng)建test登陸用戶(hù),密碼為123,默認(rèn)庫(kù)為tongji
create login test with password='123',default_database=tongji
?為登陸用戶(hù)創(chuàng)建數(shù)據(jù)庫(kù)用戶(hù)test1(create user),默認(rèn)庫(kù)為dbo
create user test1 for login test with default_schema=dbo
?創(chuàng)建DEPT表(要先去到庫(kù)里執(zhí)行)
create table DEPT
(
DEPTNO int primary key,
DNAME VARCHAR(14),
LOC VARCHAR(13)
)
數(shù)據(jù)類(lèi)型(data_type)規(guī)定了列可容納何種數(shù)據(jù)類(lèi)型。下面的表格包含了SQL中最常用的數(shù)據(jù)類(lèi)型:
數(shù)據(jù)類(lèi)型 描述
?integer(size)
?int(size)
?smallint(size)
?tinyint(size) 僅容納整數(shù)。在括號(hào)內(nèi)規(guī)定數(shù)字的最大位數(shù)。
?decimal(size,d)
?numeric(size,d) 容納帶有小數(shù)的數(shù)字。
"size" 規(guī)定數(shù)字的最大位數(shù)。"d" 規(guī)定小數(shù)點(diǎn)右側(cè)的最大位數(shù)。
char(size) 容納固定長(zhǎng)度的字符串(可容納字母、數(shù)字以及特殊字符)。
在括號(hào)中規(guī)定字符串的長(zhǎng)度。
varchar(size) 容納可變長(zhǎng)度的字符串(可容納字母、數(shù)字以及特殊的字符)。
在括號(hào)中規(guī)定字符串的最大長(zhǎng)度。
date(yyyymmdd) 容納日期。
您可以在表中創(chuàng)建索引,以便更加快速高效地查詢(xún)數(shù)據(jù)。
用戶(hù)無(wú)法看到索引,它們只能被用來(lái)加速搜索/查詢(xún)。
注釋?zhuān)焊乱粋€(gè)包含索引的表需要比更新一個(gè)沒(méi)有索引的表更多的時(shí)間,這是由于索引本身也需要更新。因此,理想的做法是僅僅在常常被搜索的列(以及表)上面創(chuàng)建索引。
SQL CREATE INDEX 語(yǔ)法
在表上創(chuàng)建一個(gè)簡(jiǎn)單的索引。允許使用重復(fù)的值:
CREATE INDEX index_name ON table_name (column_name)
注釋?zhuān)?quot;column_name" 規(guī)定需要索引的列。
SQL CREATE UNIQUE INDEX 語(yǔ)法
在表上創(chuàng)建一個(gè)唯一的索引。唯一的索引意味著兩個(gè)行不能擁有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name)
假如您希望索引不止一個(gè)列,您可以在括號(hào)中列出這些列的名稱(chēng),用逗號(hào)隔開(kāi):
create index sed on Persons (City,Name);
語(yǔ)法
INSERT INTO 表名稱(chēng) VALUES (值1, 值2,....)
我們也可以指定所要插入數(shù)據(jù)的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
?插入數(shù)據(jù)
insert into DEPT VALUES(101,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES(102,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES(103,'SALES','CHICAGO');
INSERT INTO DEPT VALUES(104,'OPERATIONS','BOSTON');
?--指定列中插入數(shù)據(jù)
insert into Persons (Name,Sex) values('大大','女')
語(yǔ)法:
UPDATE 表名稱(chēng) SET 列名稱(chēng) = 新值 WHERE 列名稱(chēng) = 某值
?為Name是大大的人添加Address
update Persons set Address='南京' where Name='大大'
?為Name是大大的人修改Address,City
update Persons set Address='中山',City='南京' where Name='大大'
DELETE 語(yǔ)句用于刪除表中的行。
語(yǔ)法
DELETE FROM 表名稱(chēng) WHERE 列名稱(chēng) = 值
刪除ID號(hào)為5的內(nèi)容
delete from Persons where Id=5
可以在不刪除表的情況下刪除所有的行。這意味著表的結(jié)構(gòu)、屬性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
通過(guò)使用drop語(yǔ)句,可以輕松地刪除索引、表和數(shù)據(jù)庫(kù)。
SQL DROP TABLE 語(yǔ)句
DROP TABLE 語(yǔ)句用于刪除表(表的結(jié)構(gòu)、屬性以及索引也會(huì)被刪除):
DROP TABLE 表名稱(chēng)
SQL DROP DATABASE 語(yǔ)句
DROP DATABASE 語(yǔ)句用于刪除數(shù)據(jù)庫(kù):
DROP DATABASE 數(shù)據(jù)庫(kù)名稱(chēng)
用于 Microsoft SQLJet (以及 Microsoft Access) 的語(yǔ)法:
DROP INDEX index_name ON table_name
ALTER TABLE 語(yǔ)句用于在已有的表中添加、修改或刪除列。
SQL ALTER TABLE 語(yǔ)法
如需在表中添加列,請(qǐng)使用下列語(yǔ)法:
ALTER TABLE table_name
ADD column_name datatype
要?jiǎng)h除表中的列,請(qǐng)使用下列語(yǔ)法:
ALTER TABLE table_name
DROP COLUMN column_name
注釋?zhuān)耗承?shù)據(jù)庫(kù)系統(tǒng)不允許這種在數(shù)據(jù)庫(kù)表中刪除列的方式 (DROP COLUMN column_name)。
要改變表中列的數(shù)據(jù)類(lèi)型,請(qǐng)使用下列語(yǔ)法:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
在Order表里增加一列
alter table Orders add Id nchar(10);
在Persons表里添加一列,增加內(nèi)容
alter table Persons add Birthday datetime;
update Persons set Birthday='1991-03-26' where Id=1
刪除Birthday列
alter table Persons drop column Birthday
**語(yǔ)法:
SELECT 列名稱(chēng) FROM 表名稱(chēng) WHERE 列 運(yùn)算符 值
下面的運(yùn)算符可在 WHERE 子句中使用:
操作符 描述
= 等于
<> 不等于
大于
< 小于
= 大于等于
<= 小于等于
BETWEEN 在某個(gè)范圍內(nèi)**
LIKE 搜索某種模式
注釋?zhuān)涸谀承┌姹镜?SQL 中,操作符 <> 可以寫(xiě)為 !=。
?查詢(xún)居住在北京的人select * from Persons where City='北京';
注意:SQL 使用單引號(hào)來(lái)環(huán)繞文本值(大部分?jǐn)?shù)據(jù)庫(kù)系統(tǒng)也接受雙引號(hào))。如果是數(shù)值,請(qǐng)不要使用引號(hào)。
?and |or運(yùn)算符
and:兩者皆成立select * from Persons where Name='王五' and Sex='女';
or:一者成立便可
select * from Persons where Name='王五' or Sex='女';
我們也可以把 AND 和 OR 結(jié)合起來(lái)(使用圓括號(hào)來(lái)組成復(fù)雜的表達(dá)式):
select * from Persons where (Name='王五' or Sex='女') and Address='北京五環(huán)';
?order by語(yǔ)句
ORDER BY 語(yǔ)句用于根據(jù)指定的列對(duì)結(jié)果集進(jìn)行排序。
ORDER BY 語(yǔ)句默認(rèn)按照升序?qū)τ涗涍M(jìn)行排序。
如果您希望按照降序?qū)τ涗涍M(jìn)行排序,可以使用 DESC 關(guān)鍵字。
例:以字母順序顯示公司名稱(chēng)(從小到大)select * from Orders order by Company
逆序(從大到小)
select * from Orders order by Company desc
以逆字母順序顯示公司名稱(chēng),并以數(shù)字順序顯示順序號(hào):
select * from Orders order by Company desc,OrderNo asc
TOP 子句用于規(guī)定要返回的記錄的數(shù)目。
對(duì)于擁有數(shù)千條記錄的大型表來(lái)說(shuō),TOP 子句是非常有用的。
注釋?zhuān)翰⒎撬械臄?shù)據(jù)庫(kù)系統(tǒng)都支持 TOP 子句。
SQL Server 的語(yǔ)法:
SELECT TOP number|percent column_name(s) FROM table_name
?查詢(xún)Persons表中頭兩條記錄
select top 2 * from Persons
?"Persons" 表中選取 50% 的記錄
select top 50 percent * from Persons
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符語(yǔ)法
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
?查詢(xún)City以“廣”開(kāi)頭, %通配符
select * from Persons where City like '廣%'
like %1---以1結(jié)尾
like 1%---以1開(kāi)頭
like %1%---包含1內(nèi)容
not like %1%---包含1內(nèi)容
IN 操作符允許我們?cè)?WHERE 子句中規(guī)定多個(gè)值
SQL IN 語(yǔ)法
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
?取出City為廣東和北京的人
select * from Persons where City in('廣東','北京')
操作符 BETWEEN ... AND 會(huì)選取介于兩個(gè)值之間的數(shù)據(jù)范圍。這些值可以是數(shù)值、文本或者日期。
SQL BETWEEN 語(yǔ)法
SELECT column_name(s) FROM table_name WHERE column_name
BETWEEN value1 AND value2
重要事項(xiàng):不同的數(shù)據(jù)庫(kù)對(duì) BETWEEN...AND 操作符的處理方式是有差異的。某些數(shù)據(jù)庫(kù)會(huì)列出介于 "Adams" 和 "Carter" 之間的人,但不包括 "Adams" 和 "Carter" ;某些數(shù)據(jù)庫(kù)會(huì)列出介于 "Adams" 和 "Carter" 之間并包括 "Adams" 和 "Carter" 的人;而另一些數(shù)據(jù)庫(kù)會(huì)列出介于 "Adams" 和 "Carter" 之間的人,包括 "Adams" ,但不包括 "Carter" 。
所以,請(qǐng)檢查你的數(shù)據(jù)庫(kù)是如何處理 BETWEEN....AND 操作符的!
?表的 SQL Alias 語(yǔ)法
SELECT column_name(s)
FROM table_name
AS alias_name
?列的 SQL Alias 語(yǔ)法
SELECT column_name AS alias_name
FROM table_name
?Alias 實(shí)例: 使用表名稱(chēng)別名
假設(shè)我們有兩個(gè)表分別是:"Persons" 和 "Product_Orders"。我們分別為它們指定別名 "p" 和 "po"。
現(xiàn)在,我們希望列出 "John Adams" 的所有定單。
我們可以使用下面的 SELECT 語(yǔ)句:
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
不使用別名的 SELECT 語(yǔ)句:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
從上面兩條 SELECT 語(yǔ)句您可以看到,別名使查詢(xún)程序更易閱讀和書(shū)寫(xiě)。
在表中存在至少一個(gè)匹配時(shí),INNER JOIN 關(guān)鍵字返回行。
**INNER JOIN 關(guān)鍵字語(yǔ)法
SELECT columnname(s) FROM tablename1 INNER JOIN tablename2
ON tablename1.columnname=tablename2.columnname
注釋?zhuān)篒NNER JOIN 與 JOIN 是相同的。
?SQL LEFT JOIN 關(guān)鍵字
LEFT JOIN 關(guān)鍵字會(huì)從左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中沒(méi)有匹配的行。
LEFT JOIN 關(guān)鍵字語(yǔ)法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋?zhuān)涸谀承?shù)據(jù)庫(kù)中, LEFT JOIN 稱(chēng)為 LEFT OUTER JOIN。
?SQL RIGHT JOIN 關(guān)鍵字
RIGHT JOIN 關(guān)鍵字會(huì)右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中沒(méi)有匹配的行。
RIGHT JOIN 關(guān)鍵字語(yǔ)法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋?zhuān)涸谀承?shù)據(jù)庫(kù)中, RIGHT JOIN 稱(chēng)為 RIGHT OUTER JOIN。
?SQL FULL JOIN 關(guān)鍵字
只要其中某個(gè)表存在匹配,F(xiàn)ULL JOIN 關(guān)鍵字就會(huì)返回行。
FULL JOIN 關(guān)鍵字語(yǔ)法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋?zhuān)涸谀承?shù)據(jù)庫(kù)中, FULL JOIN 稱(chēng)為 FULL OUTER JOIN。
use master
create database test
use test
create user test1 for login test with default_schema=dbo
exec sp_addrolemember 'db_owner','test1'
exec sp_addrolemember 'db_owner','test1'
?賬號(hào)管理
?禁用賬號(hào)
alter login test disable
?啟用賬號(hào)
alter login test enable;
?登錄賬號(hào)改名
alter login test with name=test_t;
修改密碼:
alter login test_t with password='123'
?數(shù)據(jù)庫(kù)用戶(hù)改名
alter user test1 with name='test_1';
?更改數(shù)據(jù)庫(kù)用戶(hù)
alter user test1 with default_schema=test;
?刪除數(shù)據(jù)庫(kù)用戶(hù)
drop user test1
?刪除登陸用戶(hù)
drop login test_t
在搜索數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),SQL 通配符可以替代一個(gè)或多個(gè)字符。
SQL 通配符必須與 LIKE 運(yùn)算符一起使用。
在 SQL 中,可使用以下通配符:
?"Persons" 表中選取居住的城市以"廣" 或 "北" 開(kāi)頭的人
select * from Persons where City like '[廣北]%'
?"Persons" 表中選取居住的城市不以"廣" 或 "北" 開(kāi)頭的人
select * from Persons where City like '[^廣北]%'
約束用于限制加入表的數(shù)據(jù)的類(lèi)型。
可以在創(chuàng)建表時(shí)規(guī)定約束(通過(guò) CREATE TABLE 語(yǔ)句),或者在表創(chuàng)建之后也可以(通過(guò) ALTER TABLE 語(yǔ)句)。
我們將主要探討以下幾種約束:
?NOT NULL
?UNIQUE
?PRIMARY KEY
?FOREIGN KEY
?CHECK
?DEFAULT
?SQL NOT NULL 約束
NOT NULL 約束強(qiáng)制列不接受 NULL 值。
NOT NULL 約束強(qiáng)制字段始終包含值。這意味著,如果不向字段添加值,就無(wú)法插入新記錄或者更新記錄。
下面的 SQL 語(yǔ)句強(qiáng)制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
?SQL UNIQUE 約束
UNIQUE 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。
PRIMARY KEY 擁有自動(dòng)定義的 UNIQUE 約束。
請(qǐng)注意,每個(gè)表可以有多個(gè) UNIQUE 約束,但是每個(gè)表只能有一個(gè) PRIMARY KEY 約束。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION 操作符用于合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果集。
請(qǐng)注意,UNION 內(nèi)部的 SELECT 語(yǔ)句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類(lèi)型。同時(shí),每條 SELECT 語(yǔ)句中的列的順序必須相同。
注釋?zhuān)耗J(rèn)地,UNION 操作符選取不同的值。如果允許重復(fù)的值,請(qǐng)使用 UNION ALL。
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 結(jié)果集中的列名總是等于 UNION 中第一個(gè) SELECT 語(yǔ)句中的列名。
--use test
--go
--create table employees_China (
--E_ID int primary key,
--E_NAME VARCHAR(15) NOT NULL
--)
--INSERT INTO employees_China VALUES(01,'Zhuang,Hua')
--INSERT INTO employees_China VALUES(02,'Wang,Wei')
--INSERT INTO employees_China VALUES(03,'Yang,Ming')
--
--
--create table employees_USA (
--E_ID int primary key,
--E_NAME VARCHAR(15) NOT NULL
--)
--INSERT INTO employees_USA VALUES(01,'Adams,John')
--INSERT INTO employees_USA VALUES(02,'Bush,George')
--INSERT INTO employees_USA VALUES(03,'Yang,Ming')
?列出所有在中國(guó)和美國(guó)的不同的雇員名:
SELECT E_NAME FROM employees_USA UNION SELECT E_NAME FROM employees_China
注釋?zhuān)哼@個(gè)命令無(wú)法列出在中國(guó)和美國(guó)的所有雇員。在上面的例子中,我們有兩個(gè)名字相同的雇員,他們當(dāng)中只有一個(gè)人被列出來(lái)了。UNION 命令只會(huì)選取不同的值。
?SQL PRIMARY KEY 約束
PRIMARY KEY 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。
主鍵必須包含唯一的值。
主鍵列不能包含 NULL 值。
每個(gè)表都應(yīng)該有一個(gè)主鍵,并且每個(gè)表只能有一個(gè)主鍵。
?SQL CREATE VIEW 語(yǔ)法
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注釋?zhuān)阂晥D總是顯示最近的數(shù)據(jù)。每當(dāng)用戶(hù)查詢(xún)視圖時(shí),數(shù)據(jù)庫(kù)引擎通過(guò)使用 SQL 語(yǔ)句來(lái)重建數(shù)據(jù)。
您可以使用下面的語(yǔ)法來(lái)更新視圖:
SQL CREATE OR REPLACE VIEW Syntax
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
?SQL 撤銷(xiāo)視圖
您可以通過(guò) DROP VIEW 命令來(lái)刪除視圖。
SQL DROP VIEW Syntax
DROP VIEW view_name
下面的表格列出了 SQL Server 中最重要的內(nèi)建日期函數(shù):
函數(shù) 描述
GETDATE() 返回當(dāng)前日期和時(shí)間
DATEPART() 返回日期/時(shí)間的單獨(dú)部分
DATEADD() 在日期中添加或減去指定的時(shí)間間隔
DATEDIFF() 返回兩個(gè)日期之間的時(shí)間
CONVERT() 用不同的格式顯示日期/時(shí)間
SQL AVG() 語(yǔ)法
SELECT AVG(column_name) FROM table_name
查詢(xún)平均值
select avg(OrderPrice) as OrderNoavg from Orders;
我們希望找到 OrderPrice 值高于 OrderPrice 平均值的客戶(hù)。
select Company from Orders where OrderPrice >(select avg(OrderPrice) from Orders)
COUNT() 函數(shù)返回匹配指定條件的行數(shù)。
?SQL COUNT(column_name) 語(yǔ)法
COUNT(column_name) 函數(shù)返回指定列的值的數(shù)目(NULL 不計(jì)入):
SELECT COUNT(column_name) FROM table_name
?SQL COUNT() 語(yǔ)法
COUNT() 函數(shù)返回表中的記錄數(shù):
SELECT COUNT(*) FROM table_name
?SQL COUNT(DISTINCT column_name) 語(yǔ)法
COUNT(DISTINCT column_name) 函數(shù)返回指定列的不同值的數(shù)目:
SELECT COUNT(DISTINCT column_name) FROM table_name
注釋?zhuān)篊OUNT(DISTINCT) 適用于 ORACLE 和 Microsoft SQL Server,但是無(wú)法用于 Microsoft Access。
SQL COUNT(column_name) 實(shí)例
我們擁有下列 "Orders" 表:
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現(xiàn)在,我們希望計(jì)算客戶(hù) "Carter" 的訂單數(shù)。
我們使用如下 SQL 語(yǔ)句:
SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
WHERE Customer='Carter'
以上 SQL 語(yǔ)句的結(jié)果是 2,因?yàn)榭蛻?hù) Carter 共有 2 個(gè)訂單:
CustomerNilsen
2
查看表中總行數(shù)
SELECT COUNT(*) AS NUMBER FROM ORDERS
去掉重復(fù)行
SELECT COUNT(DISTINCT Company) AS NUMBER FROM ORDERS
FIRST() 函數(shù)返回指定的字段中第一個(gè)記錄的值。
提示:可使用 ORDER BY 語(yǔ)句對(duì)記錄進(jìn)行排序。
SQL FIRST() 語(yǔ)法
SELECT FIRST(column_name) FROM table_name
sql2005不支持
?MAX() 函數(shù)
MAX 函數(shù)返回一列中的最大值。NULL 值不包括在計(jì)算中。
SELECT MAX(column_name) FROM table_name
注釋?zhuān)篗IN 和 MAX 也可用于文本列,以獲得按字母順序排列的最高或最低值。
查找OrderPrice列中最大值
select max(OrderPrice) as maxprice from Orders
?MIN() 函數(shù)
MIN 函數(shù)返回一列中的最小值。NULL 值不包括在計(jì)算中。
SQL MIN() 語(yǔ)法
SELECT MIN(column_name) FROM table_name
注釋?zhuān)篗IN 和 MAX 也可用于文本列,以獲得按字母順序排列的最高或最低值。
select min(OrderPrice) as maxprice from Orders
SUM 函數(shù)返回?cái)?shù)值列的總數(shù)(總額)。
SQL SUM() 語(yǔ)法
SELECT SUM(column_name) FROM table_name
查看orderprice列總和
select sum(OrderPrice) as maxprice from Orders
GROUP BY 語(yǔ)句用于結(jié)合合計(jì)函數(shù),根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。
SQL GROUP BY 語(yǔ)法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
我們希望查找每個(gè)客戶(hù)的總金額(總訂單)。
select Company,sum(OrderPrice)as sumprice from Orders group by Company
?HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 關(guān)鍵字無(wú)法與合計(jì)函數(shù)一起使用。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
查找客戶(hù) "IBM" 或 "Apple" 擁有超過(guò) 1500 的訂單總金額。
select Company,sum(OrderPrice)as sumprice from Orders where Company='IBM' OR Company='Apple' group by Company having sum(OrderPrice) >1500
UPPER 函數(shù)把字段的值轉(zhuǎn)換為大寫(xiě)。
SQL UPPER() 語(yǔ)法
SELECT UPPER(column_name) FROM table_name
全換成大寫(xiě)
select upper(Company) as upname from Orders
?LOWER()函數(shù)
語(yǔ)法同上
全換成小寫(xiě)
select lower(Company) as upname from Orders
LEN 函數(shù)返回文本字段中值的長(zhǎng)度。
SQL LEN() 語(yǔ)法
SELECT LEN(column_name) FROM table_name
取“Company” 的值的長(zhǎng)度
select lEN(Company) as LENname from Orders
ROUND 函數(shù)用于把數(shù)值字段舍入為指定的小數(shù)位數(shù)。
SQL ROUND() 語(yǔ)法
SELECT ROUND(column_name,decimals) FROM table_name
參數(shù) 描述
column_name 必需。要舍入的字段。
decimals 必需。規(guī)定要返回的小數(shù)位數(shù)
把名稱(chēng)和價(jià)格舍入為最接近的整數(shù)
select ProductName,round(UnitPrice,0) as roundprice from products
NOW 函數(shù)返回當(dāng)前的日期和時(shí)間。
提示:如果您在使用 Sql Server 數(shù)據(jù)庫(kù),請(qǐng)使用 getdate() 函數(shù)來(lái)獲得當(dāng)前的日期時(shí)間。
SQL NOW() 語(yǔ)法
SELECT NOW() FROM table_name
select ProductName,UnitPrice, getdate() as date from products
修改日期格式
select ProductName,UnitPrice, CONVERT( VARCHAR(10),getdate(),23) as date from products
參考資料:
http://www.w3school.com.cn/sql/sql_view.asp
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。