摘要
由于最近參加校招,題庫中有1部份sql語句的題目,感覺不是很難吧?但因之前沒學過sql這門語言,當時心里是謝絕的,所以決定發瘋圖強,找些資料,學了以后根據自己的理解寫出來,再說以后肯定也是會用到的,所以學了肯定是有百利而無1害,所以,大家共勉~
雞湯1則:
“人生不是百米賽跑,而是馬拉松~”
本文目錄
結構化查詢語言SQL(STRUCTURED QUERY LANGUAGE)是最重要的關系數據庫操作語言,并且它的影響已超越數據庫領域,得到其他領域的重視和采取,如人工智能領域的數據檢索,第4代軟件開發工具中嵌入SQL的語言等。
sql指結構化查詢語句
sql讓我們有能力訪問數據庫
上面只是大致的介紹了sql的定義和作用,想詳細了解,百度1下,我就不在這里贅述了。
這里我提供了安裝鏈接,大家根據自己的電腦版本自行選擇。2012簡體中文版官方下載頁面:http://www.microsoft.com/zh-cn/download/details.aspx?id=29066
操作系統:
最少等于或高于win7操作系統版本.
內存空間:
最少1GB,推薦使用4GB的內存,最好不要安裝在C盤。
安裝步驟:
具體的安裝步驟網上有很多教程,我自己是根據慕課網的教學視頻安裝的。說的很詳細,謝謝慕課網的老師們!這里的學習安裝視頻地址:http://www.imooc.com/video/8469
那當你安裝配置好sql server 2012以后,我們開始學習sql語言。
1個數據庫通常包括1個或多個表。每一個表由1個名字標識(例如“客戶”或“定單”)。表包括帶有數據的記錄(行)。
下面的例子是1個名為”Persons”的表:
name | ages | sex | address | city |
---|---|---|---|---|
張3 | 23 | 男 | 北京路 | 南京 |
李4 | 22 | 男 | 上海路 | 北京 |
小明 | 19 | 男 | 遵義路 | 北京 |
妮兒 | 18 | 女 | 廣州路 | 重慶 |
翠花 | 21 | 女 | 天津路 | 哈爾濱 |
上面的表包括4條記錄(每條對應1個人)和5個列(姓名、年齡、性別、地址、城市)
sql對大小寫不敏感
sql DML(數據操作語言)
可以把SQL分為兩個部份:數據操作語言(DML)和數據定義語言(DDL)。
sql(結構化查詢語言)是用于履行查詢的語法。sql語言也包括更新、插入和刪除記錄的語法。
查詢和更新指令構成了sql的DML部份:
sql DDL(數據定義語言)
SQL 的數據定義語言 (DDL) 部份使我們有能力創建或刪除表格。
下面我先在數據庫中創建1個數據表,然后在對數據表進行1系列的操作。
那末先了解在數據庫中怎樣創建1張數據表?
create table語句 用于創建數據庫中的表。
sql create table語法
create table 表名
(列名稱1 數據類型,
列名稱2 數據類型,
列名稱3 數據類型,
......
)
數據類型規定了列可容納何種數據類型。下面的表格包括了sql中最經常使用的數據類型。
數據類型 | 描寫 |
---|---|
integer/int/smallint/tinyint(size) | 僅容納整數。在括號內規定數字的最大位數 |
decimal/numeric(size,d) | 容納帶有小數的數字。”size”規定數字的最大位數。”d”規定小數點右邊的最大位數 |
char(size) | 容納固定長度的字符串(可容納字母,數字和特殊字符)。在括號中規定字符串的長度 |
varchar(size) | 容納可變長度的字符串(可容納字母、數字和特殊的字符)。在括號中規定字符串的最大長度。 |
date(yyyymmdd) | 容納日期 |
那末我們使用create table創建上述的表Persons。
在創建數據Persons表之前,先得先創建1個數據庫,可以理解為庫是1個容器,創建庫的方法很簡單,以下圖所示就能夠創建1個新的數據庫,或使用“create database 數據庫名” 語句也能夠成功創建1個新的數據庫。
創建好數據庫以后,我在數據庫中創建1張數據表,把我上面的Persons的值全插入進去,進行后面的sql操作。但是由于中文與sql默許編碼不符,所以會出現全是???的亂碼,所以我先解決編碼問題。
解決編碼問題,以sql server 2012為例,詳細步驟如:右鍵點擊剛創建好的數據庫->屬性-> 選項->排序規則->選擇為Chinese_PRC_CI_AS
解決好上述1系列問題以后,就能夠創建1個數據表了,我以上面的Persons表為例。sql語句以下:
use [MyDB] /*use 語句指定數據庫*/
create table Persons
(
name varchar(255) not null,
age int not null,
sex varchar(255) not null,
location varchar(255),
city varchar(255)
);
創建好數據表Persons以后,使用insert into 插入數據。insert into 分為行插數據跟列插數據。
我使用行插方法對表Persons插入數據。
insert into Persons values(N'張3',23,N'男',N'北京路',N'南京');
insert into Persons values(N'李4',22,N'男',N'上海路',N'北京');
insert into Persons values(N'小明',19,N'男',N'遵義路',N'北京');
insert into Persons values(N'妮兒',18,N'女',N'廣州路',N'重慶');
insert into Persons values(N'翠花',21,N'女',N'天津路',N'哈爾濱');
得到以下結果集:
下面使用我生成好的數據表Persons進行下面的sql操作。
select 語句用于從表當選取數據,結果被存儲在1個結果表中。
select 列名 from 表名; /*columns_name為想獲得的列*/
select * from 表名; /*如果想獲得全部列信息,可用*替換columns_name */
那末假設我想獲得上面”Persons”表的name和city列,使用以下sql代碼便可得到:
select name,city from Persons ; /*當選取多行時,中間用英文狀態下的','分隔開*/
查詢結果以下所示:
那末假設我希望此結果只輸出性別為男性的數據,此處用where子句。以下sql語句所示:
select * from Persons where sex=N'男'; /*中文前面加"N"*/
查詢結果以下所示:
下面對where子句進行詳細介紹
作用:where子句用于規定選擇的標準。
如需有條件地從表當選取數據,可將where子句添加select語句
select 列名 from 表名 where 列名 運算符 值
下表的運算符可在where子句中使用:
操作符 | 描寫 |
---|---|
= | 等于(切記sql中等于為1個”=”號,某些語言中等于為”==”號) |
<> | 不等于(某些版本的sql可以寫為”!=”) |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
between and | 在某個范圍內 |
like | 搜索某種模式 |
in | 可以規定多個值 |
對上述表中的等于、不等于、小于、不小于、大于、不大于的使用跟其他語言的使用方法1樣,在這里不贅述,詳細來介紹下between and、like、in的使用方法。
between 操作符在where子句中使用,作用是選取介于兩個值之間的數據范圍。
sql between 語法
select 列名 from 表名 where 列名 between 值1 and 值2; /*語句中的列名可相同可不同,值1與值2的數據類型必須相同*/
使用between and 語句獲得表Persons中age在18⑵2歲的人,sql between語句以下:
select * from Persons where age between 18 and 21; /*between and語句獲得的值包括兩真個值*/
select * from Persons where age >=18 and age<= 21; /*同等于上句的查詢結果*/
查詢結果以下所示:
like 操作符用于在where子句中搜索列中的指定模式。
sql like 操作符語法
select 列名 from 表名 where 列名 like pattern; /* "%" 可用于定義通配符(模式中缺少的字母,還有其他通配符,如"_"等*/
想獲得city中以”京”結尾的人,sql語句以下所示:
select * from Persons where city like N'%京';
in操作符允許在where子句中規定多個值。
sql in 語法:
select 列名 from 表名 where 列名 in (值1,值2)
in操作符實例:想選取出小明和妮兒的數據。
select * from Persons where name in (N'小明',N'妮兒');
查詢的結果以下所示:
distinc關鍵字用于返回唯1不同的值(有點去重的意思)
distinct 語法:
select distinct 列名 from 表名
對Persons數據表的city列進行distinct操作,sql語句以下:
select distinct city from Persons ;/*找出city列中的唯1值*/
查詢的結果以下所示:
group by:合計函數,根據1個或多個列對表分組
sql group by 語法:
select 列名,合計函數(列名) as 新列名 from 表名 group by 列名; /*合計函數1般有sum等,as表示為合計函數計算的結果新命名*/
對city列分組,計算其組的平均年齡,sql語句以下:
select city,sum(age) as sum_age from Persons group by city;/*對city分組,然后計算組內年齡的總和*/
查詢的結果所下所示:
那末假設我想找出年齡和小于30的city,怎樣做呢?首先我會想到用where語句來鎖定范圍,但是呢?sql中where 關鍵字沒法與合計函數1起使用,不信你自己試試唄!這也正是having子句 出現的緣由,那末下面我使用having子句來查詢我想要的結果。
sql語句以下所示:
select city,sum(age) as sum_age from Persons group by city having sum(age)<30; /*這里需要注意的是having必須使用合計函數來查詢結果,之前試過用sum_age<30,報錯*/
上面講完了創建數據表(create table 表名)、插入數據(insert into),那末下面簡單介紹下修改(update)和刪除(delete)表中數據。
update 語句用于修改表中的數據。
sql update語法:
update 表名 set 列名=新值 where 列名=某值; /*列名通常不同*/
假設我將李4的age填錯了,想做出修改,那末sql 語句以下:
update Persons set age=20 where name=N'李4'; /*中文前加N*/
查詢結果以下所示:
通過修改表中的數據,如截圖紅框可見,李4的age已被修改。
dalete 語句用于刪除表中的行
sql delete 語法:
delete from 表名 where 列名=值; /*刪除符合where條件的行*/
delete from 表名; /*可以在不刪除表的情況下刪除所有行,意味著表的結構,屬性和索引都是完全的,直接刪除表為drop 表名*/
假設刪除李4的信息,sql語句以下所示:
delete from Persons where name=N'李4'; /*中文前加N*/
查詢的結果以下所示:
可以看到Persons表中,李4的信息已被刪除。