日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

linux mysql select_MySQL-Select语句高级应用

發布時間:2023/12/2 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux mysql select_MySQL-Select语句高级应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀目錄

1.1 SELECT高級應用

1.2 select中where子句使用

1.3 select中ORDER BY子句

1.4 LIMIT子句

1.5 多表連接查詢

1.6 Informatica_schema獲取元數據

1.7 參考文獻

1.1 SELECT高級應用

1.1.1 前期準備工作

本次測試使用的是world數據庫,由MySQL官方提供下載地址:

https://dev.mysql.com/doc/index-other.html

world文件導入方法,官方說明:

https://dev.mysql.com/doc/world-setup/en/world-setup-installation.html

下載sqlyog軟件,用于之后的數據庫管理用:

http://www.webyog.com

創建用戶,能夠讓sqlyog登錄數據庫即可,注意權限控制。

mysql> grant all on *.* to root@'%' identified by '123';

Query OK, 0 rows affected (0.00 sec)

授權用戶后參看

mysql> select user,host from mysql.user where user like 'root';

+------+-----------+

| user | host |

+------+-----------+

| root | % |

| root | 10.0.0.1 |

| root | 127.0.0.1 |

| root | localhost |

+------+-----------+

4 rows in set (0.00 sec)

1.1.2 select語法格式說明

mysql> help select;

Name: 'SELECT'

Description:

Syntax:

SELECT

[ALL | DISTINCT | DISTINCTROW ]

[HIGH_PRIORITY]

[STRAIGHT_JOIN]

[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

select_expr [, select_expr ...]

[FROM table_references

[PARTITION partition_list]

[WHERE where_condition]

[GROUP BY {col_name | expr | position}

[ASC | DESC], ... [WITH ROLLUP]]

[HAVING where_condition]

[ORDER BY {col_name | expr | position}

[ASC | DESC], ...]

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

[PROCEDURE procedure_name(argument_list)]

[INTO OUTFILE 'file_name'

[CHARACTER SET charset_name]

export_options

| INTO DUMPFILE 'file_name'

| INTO var_name [, var_name]]

[FOR UPDATE | LOCK IN SHARE MODE]]

1.2 select中where子句使用

SELECT *|{[DISTINCT] column|select_expr [alias], ...]}

[FROM [database.]table]

[WHERE conditions];

where條件的說明:

WHERE條件又叫做過濾條件,它從FROM子句的中間結果中去掉所有條件conditions不為TRUE(而為FALSE或者NULL)的行。

WHERE子句跟在FROM子句后面,不能在WHERE子句中使用列別名。

【示例一】where字句的基本使用

SELECT * FROM world.`city` WHERE CountryCode='CHN';

or

SELECT * FROM world.`city` WHERE CountryCode='chn';

sql說明:從數據庫中查找是中國的城市。

注意:

WHERE中出現的字符串和日期字面量必須使用引號括起來

這里,字符串字面量寫成大寫或小寫結果都一樣,即不區分大小寫進行查詢。

這和Oracle不同,ORACLE中WHERE條件中的字面量是區分大小寫的

【示例二】where字句中的邏輯操作符

SELECT * FROM world.`city`

WHERE CountryCode='chn' AND district = 'shanxi';

sql說明: 從數據庫中查找是中國的并且是山西的城市

邏輯操作符介紹:

邏輯操作符

說明

and

邏輯與。只有當所有的子條件都為true時,and才返回true。否則返回false或null

or

邏輯或。只要有一個子條件為true,or就返回true。否則返回false或null

not

邏輯非。如果子條件為true,則返回false;如果子條件為false,則返回true

xor

邏輯異或。當一個子條件為true而另一個子條件為false時,其結果為true;

當兩個條件都為true或都為false時,結果為false。否則,結果為null

【示例三】:where字句中的范圍比較

SELECT * FROM world.`city`

WHERE

population BETWEEN 100000 AND 200000 ;

sql說明: 從數據庫中查找人口數量在 100000-200000 之間的城市

【示例四】:where字句中的IN

SELECT * FROM city

WHERE countrycode IN ('CHN','JPN');

sql說明: 查詢中國和日本的所有城市

【示例五】:where字句中的like

USE world;

SELECT * FROM city

WHERE countrycode LIKE 'ch%';

sql說明: 從city表中找到國家是一ch開頭的。

like的語法:

like ‘匹配模式字符串’

實現模式匹配查詢或者模糊查詢:測試一個列值是否匹配給出的模式

在‘匹配模式字符串’中,可以有兩個具有特殊含義的通配字符:

%:表示0個或者任意多個字符

_:只表示一個任意字符

1.3 select中ORDER BY子句

1.3.1 order by 子句的作用

ORDER BY子句用來排序行

如果SELECT語句中沒有ORDER BY子句,那么結果集中行的順序是不可預料的

語法:

SELECT expr

FROM table

[WHERE condition(s)]

[ORDER BY {column, expr, numeric_position} [Asc|DEsc]];

部分參數說明:

參數

參數說明

Asc

執行升序排序。默認值

DEsc

執行降序排序

使用方法

ORDER BY子句一般在SELECT語句的最后面

1.3.2 order by 示例

【示例一】Order by基本使用

SELECT * FROM city

ORDER BY population;

sql說明:將城市表按照人口數量升序排列

【示例二】多個排序條件

SELECT * FROM city

ORDER BY population,countrycode;

sql說明: 按照人口和國家進行排序

【示例三】以select字句列編號排序

SELECT * FROM city

ORDER BY 5;

sql說明:按照第5列進行排序

【示例四】desc實踐

SELECT * FROM city

ORDER BY 5 DESC;

sql說明: 按照第列進行逆序排列

說明:NULL值的排序

在MySQL中,把NULL值當做一列值中的最小值對待。

因此,升序排序時,它出現在最前面。

1.4 LIMIT子句

特點說明:

MySQL特有的子句。

它是SELECT語句中的最后一個子句(在order by后面)。

它用來表示從結果集中選取最前面或最后面的幾行。

偏移量offset的最小值為0。

語法:

limit [OFFSET ]

或者

limit [,]

查詢示例

SELECT * FROM city

ORDER BY 5 DEsc

LIMIT 4;

sql說明: 獲取排序后的前4行

注:先按照人口數量進行降序排序,然后使用limit從中挑出最前面的4行。

如果沒有order by子句,返回的4行就是不可預料的。

1.5 多表連接查詢

1.5.1 傳統的連接寫法(使用where)

SELECT NAME,ci.countrycode ,cl.language ,ci.population

FROM city ci , countrylanguage cl

WHERE ci.`CountryCode`=cl.countrycode;

sql說明: city定別名為ci ,國家定別名問為cl,進行連表查詢,NAME是共同的鍵值,使用where條件進行連接。

注意:一旦給表定義了別名,那么原始的表名就不能在出現在該語句的其它子句中了

1.5.2 NATURAL? JOIN子句

自動到兩張表中查找所有同名同類型的列拿來做連接列,進行相等連接

SELECT NAME,countrycode ,LANGUAGE ,population

FROM city NATURAL JOIN countrylanguage

WHERE population > 1000000

ORDER BY population;

sql說明:使用natural join 進行相等連接,兩個表,條件為人口大于1000000的,進行升序排列。

注意:在select子句只能出現一個連接列

1.5.3 使用using子句

SELECT NAME,countrycode ,LANGUAGE ,population

FROM city JOIN countrylanguage

USING(countrycode);

sql說明:使用join進行兩表的來連接,using指定countrycode為關聯列。

1.5.4 集合操作

UNION [DISTINCT]

UNION ALL

語法:

SELECT ...

UNION [ALL | DISTINCT]

SELECT ...

[UNION [ALL | DISTINCT]

SELECT ...]

? UNION用于把兩個或者多個select查詢的結果集合并成一個

??進行合并的兩個查詢,其SELECT列表必須在數量和對應列的數據類型上保持一致

??默認會去掉兩個查詢結果集中的重復行

??默認結果集不排序

??最終結果集的列名來自于第一個查詢的SELECT列表

1.5.5 分組操作及分組處理

“Group By”從字面意義上理解就是根據“By”指定的規則對數據進行分組,所謂的分組就是將一個“數據集”劃分成若干個“小區域”,然后針對若干個“小區域”進行數據處理。

Having與Where的區別

where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,where條件中不能包含聚組函數,使用where條件過濾出特定的行。

having 子句的作用是篩選滿足條件的組,即在分組之后過濾數據,條件中經常包含聚組函數,使用having 條件過濾出特定的組,也可以使用多個分組標準進行分組。

1.5.6 【select高級應用】數據庫備份腳本拼接

SELECT CONCAT("mysqldump ","-uroot ","-p123 ",table_schema," ",table_name,">/tmp/",table_schema,"_",table_name,".sql")

FROM information_schema.tables

WHERE table_schema='world'

INTO OUTFILE '/tmp/world_bak.sh'

使用concat進行拼接數據備份腳本。

-- 顯示信息,可直接進行運算

SELECT CONCAT("132");

SELECT CONCAT("132+123");

SELECT CONCAT("132+123");

-- 查看引擎是innodb的表

SELECT TABLE_NAME FROM TABLES WHERE ENGINE='innodb';

SELECT CHARACTER_SET_NAME, COLLATION_NAME

FROM INFORMATION_SCHEMA.COLLATIONS

WHERE IS_DEFAULT = 'Yes';

-- 顯示每個庫下有多少表

SELECT TABLE_SCHEMA ,COUNT(*)

FROM information_schema.`TABLES`

GROUP BY TABLE_SCHEMA;

1.5.7 子查詢

子查詢定義

在一個表表達中可以調用另一個表表達式,這個被調用的表表達式叫做子查詢(subquery),我么也稱作子選擇(subselect)或內嵌選擇(inner select)。子查詢的結果傳遞給調用它的表表達式繼續處理。

子查詢(inner? query)先執行,然后執行主查詢(outer? query)

子查詢按對返回結果集的調用方法,可分為:where型子查詢,from型子查詢及exists型子查詢。

使用子查詢原則

一個子查詢必須放在圓括號中。

將子查詢放在比較條件的右邊以增加可讀性。

子查詢不包含 ORDER BY 子句。對一個 SELECT 語句只能用一個 ORDER BY 子句,并且如果指定了它就必須放在主 SELECT 語句的最后。

在子查詢中可以使用兩種比較條件:單行運算符(>, =, >=, , <=) 和多行運算符(IN, ANY, ALL)。

不相關子查詢

子查詢中沒有使用到外部查詢的表中的任何列。先執行子查詢,然后執行外部查詢

相關子查詢(correlated subquery)

子查詢中使用到了外部查詢的表中的任何列。先執行外部查詢,然后執行子查詢

以上兩種類型之下又可以分為:

行子查詢(row subquery):返回的結果集是 1 行 N 列

列子查詢(column subquery):返回的結果集是 N 行 1列

表子查詢(table subquery):返回的結果集是 N 行 N 列

標量子查詢(scalar subquery):返回1行1列一個值

子查詢示例

創建數據表

1 CREATE TABLE PLAYERS

2 (PLAYERNO INTEGER NOT NULL,

3 NAME CHAR(15) NOT NULL,

4 INITIALS CHAR(3) NOT NULL,

5 BIRTH_DATE DATE ,

6 SEX CHAR(1) NOT NULL,

7 JOINED SMALLINT NOT NULL,

8 STREET VARCHAR(30) NOT NULL,

9 HOUSENO CHAR(4) ,

10 POSTCODE CHAR(6) ,

11 TOWN VARCHAR(30) NOT NULL,

12 PHONENO CHAR(13) ,

13 LEAGUENO CHAR(4) ,

14 PRIMARY KEY (PLAYERNO));

15

16 CREATE TABLE PENALTIES

17 (PAYMENTNO INTEGER NOT NULL,

18 PLAYERNO INTEGER NOT NULL,

19 PAYMENT_DATE DATE NOT NULL,

20 AMOUNT DECIMAL(7,2) NOT NULL,

21 PRIMARY KEY (PAYMENTNO));

22

23 INSERT INTO PLAYERS VALUES (2, 'Everett', 'R', '1948-09-01', 'M', 1975, 'Stoney Road','43', '3575NH', 'Stratford', '070-237893', '2411');

24 INSERT INTO PLAYERS VALUES (6, 'Parmenter', 'R', '1964-06-25', 'M', 1977, 'Haseltine Lane','80', '1234KK', 'Stratford', '070-476537', '8467');

25 INSERT INTO PLAYERS VALUES (7, 'Wise', 'GWS', '1963-05-11', 'M', 1981, 'Edgecombe Way','39', '9758VB', 'Stratford', '070-347689', NULL);

26 INSERT INTO PLAYERS VALUES (8, 'Newcastle', 'B', '1962-07-08', 'F', 1980, 'Station Road','4', '6584WO', 'Inglewood', '070-458458', '2983');

27 INSERT INTO PLAYERS VALUES (27, 'Collins', 'DD', '1964-12-28', 'F', 1983, 'Long Drive','804', '8457DK', 'Eltham', '079-234857', '2513');

28 INSERT INTO PLAYERS VALUES (28, 'Collins', 'C', '1963-06-22', 'F', 1983, 'Old Main Road','10', '1294QK', 'Midhurst', '010-659599', NULL);

29 INSERT INTO PLAYERS VALUES (39, 'Bishop', 'D', '1956-10-29', 'M', 1980, 'Eaton Square','78', '9629CD', 'Stratford', '070-393435', NULL);

30 INSERT INTO PLAYERS VALUES (44, 'Baker', 'E', '1963-01-09', 'M', 1980, 'Lewis Street','23', '4444LJ', 'Inglewood', '070-368753', '1124');

31 INSERT INTO PLAYERS VALUES (57, 'Brown', 'M', '1971-08-17', 'M', 1985, 'Edgecombe Way','16', '4377CB', 'Stratford', '070-473458', '6409');

32 INSERT INTO PLAYERS VALUES (83, 'Hope', 'PK', '1956-11-11', 'M', 1982, 'Magdalene Road','16A', '1812UP', 'Stratford', '070-353548', '1608');

33 INSERT INTO PLAYERS VALUES (95, 'Miller', 'P', '1963-05-14', 'M', 1972, 'High Street','33A', '5746OP', 'Douglas', '070-867564', NULL);

34 INSERT INTO PLAYERS VALUES (100, 'Parmenter', 'P', '1963-02-28', 'M', 1979, 'Haseltine Lane','80', '6494SG', 'Stratford', '070-494593', '6524');

35 INSERT INTO PLAYERS VALUES (104, 'Moorman', 'D', '1970-05-10', 'F', 1984, 'Stout Street','65', '9437AO', 'Eltham', '079-987571', '7060');

36 INSERT INTO PLAYERS VALUES (112, 'Bailey', 'IP', '1963-10-01', 'F', 1984, 'Vixen Road','8', '6392LK', 'Plymouth', '010-548745', '1319');

37

38 INSERT INTO PENALTIES VALUES (1, 6, '1980-12-08',100);

39 INSERT INTO PENALTIES VALUES (2, 44, '1981-05-05', 75);

40 INSERT INTO PENALTIES VALUES (3, 27, '1983-09-10',100);

41 INSERT INTO PENALTIES VALUES (4,104, '1984-12-08', 50);

42 INSERT INTO PENALTIES VALUES (5, 44, '1980-12-08', 25);

43 INSERT INTO PENALTIES VALUES (6, 8, '1980-12-08', 25);

44 INSERT INTO PENALTIES VALUES (7, 44, '1982-12-30', 30);

45 INSERT INTO PENALTIES VALUES (8, 27, '1984-11-12', 75);

創建數據庫語句

例一、獲取和100號球員性別相同并且居住在同一城市的球員號碼。

select playerno

from players

where (sex, town) = (

select sex, town

from players

where playerno = 100);

例二、獲取和27號球員出生在同一年的球員的號碼

select playerno

from players

where year(birth_date) =

(select year(birth_date)

from players

where playerno = 27)

and playerno <> 27;

例三、獲取那些至少支付了一次罰款的球員的名字和首字母。

select name, initials

from players

where exists

(select * from penalties

where playerno = players.playerno);

例四、獲取那些從來沒有罰款的球員的名字和首字母。

select name, initials

from players

where not exists

(select * from penalties

where playerno = players.playerno);

1.6 Informatica_schema獲取元數據

1.6.1 元數據訪問方法

查詢 INFORMATION_SCHEMA 數據庫表。其中包含 MySQL 數據庫服務器所管理的所有對象的相關數據

使用 SHOW 語句。用于獲取數據庫和表信息的 MySQL 專用語句

使用 DESCRIBE(或 DESC)語句。用于檢查表結構和列屬性的快捷方式

使用 mysqlshow 客戶端程序。SHOW 語法的命令行程序

INFORMATION_SCHEMA數據庫優點介紹

充當數據庫元數據的中央系統信息庫,模式和模式對象,服務器統計信息(狀態變量、設置、連接) 。

采用表格式以實現靈活訪問,使用任意 SELECT 語句。是“虛擬數據庫”,表并非“真實”表(基表),而是“系統視圖”,根據當前用戶的特權動態填充表。

列出 INFORMATION_SCHEMA數據庫中所有的表:

mysql> USE information_schema;

Database changed

mysql> SHOW TABLES;

+---------------------------------------+

| Tables_in_information_schema |

+---------------------------------------+

| CHARACTER_SETS |

| COLLATIONS |

| COLLATION_CHARACTER_SET_APPLICABILITY |

| COLUMNS |

| COLUMN_PRIVILEGES |

1.6.2 對 INFORMATION_SCHEMA 使用 SELECT

示例一:

查找引擎是innodb的表。

SELECT TABLE_NAME, ENGINE

FROM INFORMATION_SCHEMA.TABLES

WHERE ENGINE= 'innodb';

示例二:

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME

FROM INFORMATION_SCHEMA.COLUMNS

WHERE DATA_TYPE = 'set';

sql說明:查找數據類型是set的表

示例三:

SELECT CHARACTER_SET_NAME, COLLATION_NAME,IS_DEFAULT

FROM INFORMATION_SCHEMA.COLLATIONS

WHERE IS_DEFAULT = 'Yes';

sql說明:查看找默認為yes的表

示例四:

SELECT TABLE_SCHEMA, COUNT(*)

FROM INFORMATION_SCHEMA.TABLES

GROUP BY TABLE_SCHEMA;

sql說明:查看每個數據庫下表的個數

使用 INFORMATION_SCHEMA 表獲取有關創建 shell 命令的信息。

SELECT CONCAT("mysqldump -uroot -p ",

TABLE_SCHEMA," ", TABLE_NAME, " >> ",

TABLE_SCHEMA,".bak.sql")

FROM TABLES WHERE TABLE_NAME LIKE 'Country%'

1.6.3 使用 mysql 命令創建 SQL 語句。

mysql -uroot -p123 --silent --skip-column-names -e "SELECT CONCAT('CREATE TABLE ', TABLE_SCHEMA, '.',TABLE_NAME, '_backup LIKE ', TABLE_SCHEMA, '.',TABLE_NAME, ';')

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA = 'world_innodb';"

1.6.4 MySQL中的show語句

SOHW databases:列出所有數據庫

SHOW TABLES:列出默認數據庫中的表

SHOW TABLES FROM :列出指定數據庫中的表

SHOW COLUMNS FROM :顯示表的列結構

SHOW INDEX FROM :顯示表中有關索引和索引列的信息

SHOW CHARACTER SET:顯示可用的字符集及其默認整理

SHOW COLLATION:顯示每個字符集的整理

SHOW STATUS:列出當前數據庫狀態

SHOW VARIABLES:列出數據庫中的參數定義值

1.6.5 DESCRIBE 語句

DESCRIBE 語句 等效于 SHOW COLUMNS

一般語法:

mysql> DESCRIBE ;

顯示 INFORMATION_SCHEMA 表信息

mysql> DESCRIBE INFORMATION_SCHEMA.CHARACTER_SETS;

+----------------------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------------------+-------------+------+-----+---------+-------+

| CHARACTER_SET_NAME | varchar(32) | NO | | | |

| DEFAULT_COLLATE_NAME | varchar(32) | NO | | | |

| DESCRIPTION | varchar(60) | NO | | | |

| MAXLEN | bigint(3) | NO | | 0 | |

+----------------------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

有關數據庫和表的結構的信息與 SHOW 語句相似

一般語法:

shell> mysqlshow [options] [db_name [table_name[column_name]]]

顯示所有數據庫或特定數據庫、表和/或列的相關信息:

[root@db02 ~]# mysqlshow -uroot -p123

Warning: Using a password on the command line interface can be insecure.

+--------------------+

| Databases |

+--------------------+

| information_schema |

| clsn |

| haha |

| mysql |

| oldboy |

| performance_schema |

| world |

+--------------------+

查看數據庫下的表

[root@db02 ~]# mysqlshow -uroot -p123 world

Warning: Using a password on the command line interface can be insecure.

Database: world

+-----------------+

| Tables |

+-----------------+

| PENALTIES |

| PLAYERS |

| city |

| country |

| countrylanguage |

+-----------------+

查看數據庫下表記錄

[root@db02 ~]# mysqlshow -uroot -p123 world city

Warning: Using a password on the command line interface can be insecure.

Database: world Table: city

+-------------+----------+-------------------+------+-----+---------+----------------+---------------------------------+---------+

| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |

+-------------+----------+-------------------+------+-----+---------+----------------+---------------------------------+---------+

| ID | int(11) | | NO | PRI | | auto_increment | select,insert,update,references | |

| Name | char(35) | latin1_swedish_ci | NO | | | | select,insert,update,references | |

| CountryCode | char(3) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |

| District | char(20) | latin1_swedish_ci | NO | | | | select,insert,update,references | |

| Population | int(11) | | NO | | 0 | | select,insert,update,references | |

+-------------+----------+-------------------+------+-----+---------+----------------+---------------------------------+---------+

查看記錄信息

[root@db02 ~]# mysqlshow -uroot -p123 world city CountryCode

Warning: Using a password on the command line interface can be insecure.

Database: world Table: city Wildcard: CountryCode

+-------------+---------+-------------------+------+-----+---------+-------+---------------------------------+---------+

| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |

+-------------+---------+-------------------+------+-----+---------+-------+---------------------------------+---------+

| CountryCode | char(3) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |

+-------------+---------+-------------------+------+-----+---------+-------+---------------------------------+---------+

查看數據庫類似like。

[root@db02 ~]# mysqlshow -uroot -p123 "w%"

Warning: Using a password on the command line interface can be insecure.

Wildcard: w%

+-----------+

| Databases |

+-----------+

| world |

+-----------+

1.7 參考文獻

https://dev.mysql.com/doc/refman/5.6/en/select.html SELECT語法官方說明

總結

以上是生活随笔為你收集整理的linux mysql select_MySQL-Select语句高级应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。