久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么掌握SQL

共計(jì) 9978 個(gè)字符,預(yù)計(jì)需要花費(fèi) 25 分鐘才能閱讀完成。

這篇文章主要講解了“怎么掌握 SQL”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著丸趣 TV 小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么掌握 SQL”吧!

實(shí)例 1

我們首先從終端連接到 MySQL 服務(wù)器并創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。

~$ sudo mysql -u root

我們將被提示輸入密碼。現(xiàn)在,我們已連接到計(jì)算機(jī)中的 MySQL 服務(wù)器。

以下命令創(chuàng)建一個(gè)名為 零售 的數(shù)據(jù)庫(kù)。

mysql  create database retail; mysql  use retail;

我們不在尚未包含任何表的零售數(shù)據(jù)庫(kù)中。

實(shí)例 2

我們將首先使用 create table 命令創(chuàng)建一個(gè)名為 customer 的表。

mysql  create table customer ( -  cust_id int primary key, -  age int, -  location varchar(20), -  gender varchar(20) -  );

我們?cè)诶ㄌ?hào)內(nèi)定義列的名稱和關(guān)聯(lián)的數(shù)據(jù)類型。將 cust_id 列指定為主鍵。

主鍵是唯一標(biāo)識(shí)每一行的列。就像熊貓數(shù)據(jù)框的索引一樣。

實(shí)例 3

我們將創(chuàng)建第二個(gè)表,稱為 訂單。

mysql  create table orders ( -  order_id int primary key, -  date date, -  amount decimal(5,2), -  cust_id int, -  foreign key (cust_id) references customer(cust_id) -  on delete cascade -  );

在一開(kāi)始,我們提到關(guān)系表通過(guò)共享列相互關(guān)聯(lián)。關(guān)聯(lián)兩個(gè)表的列是外鍵。

外鍵是將表與另一個(gè)表相關(guān)聯(lián)的東西。外鍵包含另一個(gè)表的主鍵。

訂單表中的 cust_id 列是外鍵,并將訂單表與客戶表相關(guān)。我們?cè)趧?chuàng)建表時(shí)指定此條件。

在最后一行,我們用 在刪除級(jí)聯(lián)上 短語(yǔ)指定另一個(gè)條件。它告訴 MySQL 當(dāng)刪除客戶表中的一行時(shí)該怎么做。訂單表中的每一行都屬于一個(gè)客戶。客戶表中的每一行都包含一個(gè)唯一的客戶 ID,并代表一個(gè)客戶。如果客戶表中的行被刪除,則意味著我們不再有該客戶。結(jié)果,屬于該客戶的訂單不再具有關(guān)聯(lián)的客戶 ID。刪除時(shí)級(jí)聯(lián) 表示沒(méi)有關(guān)聯(lián)客戶 ID 的訂單也將被刪除。

實(shí)例 4

零售數(shù)據(jù)庫(kù)現(xiàn)在包含兩個(gè)表。我們可以使用 show table 命令查看數(shù)據(jù)庫(kù)中存在的表。

mysql  show tables; +------------------+ | Tables_in_retail | +------------------+ | customer | | orders | +------------------+

注意:SQL 中的命令以分號(hào) () 結(jié)尾。

實(shí)例 5

desc 或 describe 命令從列名,數(shù)據(jù)類型和一些其他信息的角度概述了該表。

mysql  desc orders; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | order_id | int(11) | NO | PRI | NULL | | | date | date | YES | | NULL | | | amount | decimal(5,2) | YES | | NULL | | | cust_id | int(11) | YES | MUL | NULL | | +----------+--------------+------+-----+---------+-------+

實(shí)例 6

我們可以修改現(xiàn)有表。例如,alter table 命令可用于添加新列或刪除現(xiàn)有列。

讓我們?cè)谟唵伪碇刑砑右涣?is_sale。

mysql  alter table orders add is_sale varchar(20);

我們編寫(xiě)列名和數(shù)據(jù)類型以及 add 關(guān)鍵字。

mysql  desc orders; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | order_id | int(11) | NO | PRI | NULL | | | date | date | YES | | NULL | | | amount | decimal(5,2) | YES | | NULL | | | cust_id | int(11) | YES | MUL | NULL | | | is_sale | varchar(20) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+

is_sale 列已添加到訂單表中。

實(shí)例 7

alter table 也可以用于刪除語(yǔ)法稍有更改的列。

mysql  alter table orders drop is_sale;

使用 drop 關(guān)鍵字而不是 add 關(guān)鍵字。我們也不必編寫(xiě)數(shù)據(jù)類型來(lái)刪除列。

實(shí)例 8

我們有表,但它們不包含任何數(shù)據(jù)。填充表的一種方法是 insert 語(yǔ)句。

mysql  insert into customer values ( -  1000, 42,  Austin ,  female  -  );

指定的值以相同的順序插入到列中。因此,我們需要保持順序一致。

實(shí)例 9

我們可以通過(guò)分隔每一行來(lái)同時(shí)插入多行。

mysql  insert into customer values -  (1001, 34,  Austin ,  male), -  (1002, 37,  Houston ,  male), -  (1003, 25,  Austin ,  female), -  (1004, 28,  Houston ,  female), -  (1005, 22,  Dallas ,  male), -  ;

我添加了一些行,并以相同的方式填充了 orders 表。

還有其他方法可以用數(shù)據(jù)填充表。例如,我們可以使用加載數(shù)據(jù) infile 或加載數(shù)據(jù)本地 infile 語(yǔ)句來(lái)加載 csv 文件。

實(shí)例 10

delete from 語(yǔ)句可用于刪除表中的現(xiàn)有行。我們需要通過(guò)提供條件來(lái)標(biāo)識(shí)要?jiǎng)h除的行。例如,下面的語(yǔ)句將刪除訂單 ID 為 17 的行。

mysql  delete from orders -  where order_id = 17;

如果我們不指定條件,則刪除給定表中的所有行。

實(shí)例 11

我們還可以更新現(xiàn)有行。讓我們更新訂單表中的一行。

+----------+------------+--------+---------+ | order_id | date | amount | cust_id | +----------+------------+--------+---------+ | 1 | 2020-10-01 | 24.40 | 1001 | +----------+------------+--------+---------+

這是訂單表中的第一行。我們想將訂單金額更改為 27.40。

mysql  update orders -  set amount = 27.40 -  where order_id = 1; mysql  select * from orders limit 1; +----------+------------+--------+---------+ | order_id | date | amount | cust_id | +----------+------------+--------+---------+ | 1 | 2020-10-01 | 27.40 | 1001 | +----------+------------+--------+---------+

我們將更新后的值寫(xiě)在 set 關(guān)鍵字之后。通過(guò)在 where 關(guān)鍵字之后提供條件來(lái)標(biāo)識(shí)要更新的行。

實(shí)例 12

如果要通過(guò)復(fù)制現(xiàn)有表的結(jié)構(gòu)來(lái)創(chuàng)建表,則可以使用帶有 like 關(guān)鍵字的 create table 語(yǔ)句。

mysql  create table orders_copy like orders; mysql  show tables; +------------------+ | Tables_in_retail | +------------------+ | customer | | orders | | orders_copy | +------------------+

orders_copy 表具有與 orders 表相同的結(jié)構(gòu),但不包含任何數(shù)據(jù)。

實(shí)例 13

我們還可以通過(guò)使用 create table 和 select 語(yǔ)句一起使用數(shù)據(jù)創(chuàng)建現(xiàn)有表的副本。

mysql  create table new_orders -  select * from orders;

似乎是兩個(gè)單獨(dú)的語(yǔ)句的組合。第一行創(chuàng)建表,第二行用 orders 表中的數(shù)據(jù)填充該表。

實(shí)例 14

drop table 語(yǔ)句可用于刪除數(shù)據(jù)庫(kù)中的表。

mysql  drop table orders_copy, new_orders; mysql  show tables; +------------------+ | Tables_in_retail | +------------------+ | customer | | orders | +------------------+

我們已經(jīng)成功刪除了在上一個(gè)示例中創(chuàng)建的表。

我們?cè)跀?shù)據(jù)庫(kù)中有兩個(gè)關(guān)系表。以下示例將說(shuō)明我們?nèi)绾问褂眠x擇查詢從這些表中檢索數(shù)據(jù)。

實(shí)例 15

最簡(jiǎn)單的查詢是查看表中的所有列。

mysql  select * from orders -  limit 3; +----------+------------+--------+---------+ | order_id | date | amount | cust_id | +----------+------------+--------+---------+ | 1 | 2020-10-01 | 27.40 | 1001 | | 2 | 2020-10-01 | 36.20 | 1000 | | 3 | 2020-10-01 | 65.45 | 1002 | +----------+------------+--------+---------+

* 選擇所有列,而 limit 關(guān)鍵字對(duì)要顯示的行數(shù)施加約束。

實(shí)例 16

通過(guò)寫(xiě)列名而不是 *,我們只能選擇某些列。

mysql  select order_id, amount -  from orders -  limit 3; +----------+--------+ | order_id | amount | +----------+--------+ | 1 | 27.40 | | 2 | 36.20 | | 3 | 65.45 | +----------+--------+

實(shí)例 17

我們可以使用 where 子句指定要選擇的行的條件。以下查詢將返回 2020 ndash;10 ndash;01 的所有訂單。

mysql  select * from orders -  where date =  2020-10-01  +----------+------------+--------+---------+ | order_id | date | amount | cust_id | +----------+------------+--------+---------+ | 1 | 2020-10-01 | 27.40 | 1001 | | 2 | 2020-10-01 | 36.20 | 1000 | | 3 | 2020-10-01 | 65.45 | 1002 | +----------+------------+--------+---------+

實(shí)例 18

where 子句接受多個(gè)條件。讓我們?cè)谏弦粋€(gè)示例中為查詢添加另一個(gè)條件。

mysql  select * from orders -  where date =  2020-10-01  and amount   50; +----------+------------+--------+---------+ | order_id | date | amount | cust_id | +----------+------------+--------+---------+ | 3 | 2020-10-01 | 65.45 | 1002 | +----------+------------+--------+---------+

實(shí)例 19

我們可能想對(duì)查詢結(jié)果進(jìn)行排序,這可以通過(guò)使用 order by 子句來(lái)完成。

以下查詢將返回 2020 ndash;10 ndash;02 的訂單,并根據(jù)金額對(duì)它們進(jìn)行排序。

mysql  select * from orders -  where date =  2020-10-02  -  order by amount; +----------+------------+--------+---------+ | order_id | date | amount | cust_id | +----------+------------+--------+---------+ | 5 | 2020-10-02 | 18.80 | 1005 | | 6 | 2020-10-02 | 21.15 | 1009 | | 4 | 2020-10-02 | 34.40 | 1001 | | 7 | 2020-10-02 | 34.40 | 1008 | | 8 | 2020-10-02 | 41.10 | 1002 | +----------+------------+--------+---------+

實(shí)例 20

默認(rèn)情況下,order by 子句對(duì)行進(jìn)行升序排序。我們可以使用 desc 關(guān)鍵字將其更改為降序。

mysql  select * from orders -  where date =  2020-10-02  -  order by amount desc; +----------+------------+--------+---------+ | order_id | date | amount | cust_id | +----------+------------+--------+---------+ | 8 | 2020-10-02 | 41.10 | 1002 | | 4 | 2020-10-02 | 34.40 | 1001 | | 7 | 2020-10-02 | 34.40 | 1008 | | 6 | 2020-10-02 | 21.15 | 1009 | | 5 | 2020-10-02 | 18.80 | 1005 | +----------+------------+--------+---------+

實(shí)例 21

SQL 是一種通用語(yǔ)言,也可以用作數(shù)據(jù)分析工具。它提供許多功能,可在從數(shù)據(jù)庫(kù)查詢時(shí)分析和轉(zhuǎn)換數(shù)據(jù)。

例如,我們可以在訂單表中計(jì)算唯一天數(shù)。

mysql  select count(distinct(date)) as day_count -  from orders; +-----------+ | day_count | +-----------+ | 4 | +-----------+

訂單表包含 4 個(gè)不同日期的訂單。as 關(guān)鍵字用于重命名查詢結(jié)果中的列。否則,該列的名稱將為 count(distinct(date))。

實(shí)例 22

訂單表中有 4 天。我們還可以找出每天有多少訂單。group by 子句將幫助我們完成此任務(wù)。

mysql  select date, count(order_id) as order_count -  from orders -  group by date; +------------+-------------+ | date | order_count | +------------+-------------+ | 2020-10-01 | 3 | | 2020-10-02 | 5 | | 2020-10-03 | 6 | | 2020-10-04 | 2 | +------------+-------------+

我們計(jì)算訂單并將其按日期列分組。

實(shí)例 23

我們將計(jì)算每天的平均訂單金額,并根據(jù)平均金額以降序排列結(jié)果。

mysql  select date, avg(amount) -  from orders -  group by date -  order by avg(amount) desc; +------------+-------------+ | date | avg(amount) | +------------+-------------+ | 2020-10-01 | 43.016667 | | 2020-10-04 | 42.150000 | | 2020-10-03 | 37.025000 | | 2020-10-02 | 29.970000 | +------------+-------------+

實(shí)例 24

我們要修改上一個(gè)示例中的查詢,并且只包含平均金額大于 30 的天。

mysql  select date, avg(amount) -  from orders -  group by date -  having avg(amount)   30 -  order by avg(amount) desc; +------------+-------------+ | date | avg(amount) | +------------+-------------+ | 2020-10-01 | 43.016667 | | 2020-10-04 | 42.150000 | | 2020-10-03 | 37.025000 |

重要的是要注意,查詢中語(yǔ)句的順序很重要。例如,如果將 order by 子句放在 having 子句之前,則會(huì)產(chǎn)生錯(cuò)誤。

實(shí)例 25

我們想找出每天的最大訂購(gòu)量。

mysql  select date, max(amount) -  from orders -  group by date; +------------+-------------+ | date | max(amount) | +------------+-------------+ | 2020-10-01 | 65.45 | | 2020-10-02 | 41.10 | | 2020-10-03 | 80.20 | | 2020-10-04 | 50.10 |

實(shí)例 26

我們要在 select 語(yǔ)句中組合多個(gè)聚合函數(shù)。為了說(shuō)明這一點(diǎn),讓我們?cè)敿?xì)說(shuō)明前面的示例。我們希望看到每個(gè)客戶的最大訂單量與最小訂單量之間的差異。我們還希望根據(jù)升序的差異對(duì)結(jié)果進(jìn)行排序,并顯示前三個(gè)結(jié)果。

mysql  select cust_id, max(amount) - min(amount) as dif -  from orders -  group by cust_id -  order by dif desc -  limit 3; +---------+-------+ | cust_id | dif | +---------+-------+ | 1007 | 46.00 | | 1009 | 28.95 | | 1002 | 24.35 | +---------+-------+

diff 列是通過(guò)從最大數(shù)量減去最小數(shù)量獲得的。

實(shí)例 27

我們現(xiàn)在切換到客戶表。讓我們找出每個(gè)城市有多少女性和男性顧客。我們需要在 group by 子句中同時(shí)寫(xiě)位置和性別列。

mysql  select location, gender, count(cust_id) -  from customer -  group by location, gender; +----------+--------+----------------+ | location | gender | count(cust_id) | +----------+--------+----------------+ | Austin | female | 2 | | Austin | male | 1 | | Dallas | female | 2 | | Dallas | male | 2 | | Houston | female | 2 | | Houston | male | 1 | +----------+--------+----------------+

實(shí)例 28

客戶表和訂單表基于 cust_id 列相互關(guān)聯(lián)。我們可以使用 SQL 連接從兩個(gè)表中查詢數(shù)據(jù)。

我們希望在客戶表中查看每個(gè)城市的平均訂單金額。

mysql  select customer.location, avg(orders.amount) as avg -  from customer -  join orders -  on customer.cust_id = orders.cust_id -  group by customer.location; +----------+-----------+ | location | avg | +----------+-----------+ | Austin | 33.333333 | | Dallas | 34.591667 | | Houston | 44.450000 | +----------+-----------+

由于我們從兩個(gè)不同的表中選擇列,因此將使用關(guān)聯(lián)的表名指定列名。上面查詢的第二,第三和第四行基于每個(gè)表中的 cust_id 列將 customer  andorders 表聯(lián)接在一起。

請(qǐng)注意,列名不必相同。無(wú)論我們使用 on 關(guān)鍵字提供什么列名,都將基于這些列進(jìn)行比較或匹配。

實(shí)例 29

我們希望查看在 2020 ndash;10 ndash;03 年下訂單的客戶的平均年齡。

mysql  select avg(c.age) as avg_age -  from customer c -  join orders o -  on c.cust_id = o.cust_id -  where o.date =  2020-10-03  +---------+ | avg_age | +---------+ | 30.0000 | +---------+

我們也可以為表名使用別名。當(dāng)我們需要多次鍵入表名時(shí),它很方便。

實(shí)例 30

我們想查看訂單量最大的客戶的位置。

mysql  select c.location, o.amount -  from customer c -  join orders o -  on c.cust_id = o.cust_id -  where o.amount = (select max(amount) from orders) -  ; +----------+--------+ | location | amount | +----------+--------+ | Dallas | 80.20 | +----------+--------+

在此查詢中,我們有一個(gè)嵌套的 select 語(yǔ)句。金額條件是使用訂單表中單獨(dú)的 select 語(yǔ)句計(jì)算得出的。

可以通過(guò)其他方式完成此任務(wù)。我選擇了這種方法來(lái)介紹嵌套查詢的概念。

感謝各位的閱讀,以上就是“怎么掌握 SQL”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么掌握 SQL 這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-27發(fā)表,共計(jì)9978字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 六枝特区| 苍溪县| 资源县| 洛扎县| 湖北省| 鄯善县| 元朗区| 延庆县| 曲松县| 泰顺县| 西吉县| 霍邱县| 华池县| 兰西县| 牟定县| 建平县| 成武县| 仁布县| 沛县| 南城县| 玛纳斯县| 北京市| 孙吴县| 潮州市| 师宗县| 奎屯市| 健康| 泾源县| 邻水| 佛山市| 富顺县| 贵港市| 云梦县| 玉环县| 辽阳县| 祁门县| 叶城县| 雷州市| 鄂托克前旗| 安徽省| 随州市|