Home>Article>Database> What does mysql sub-conditional query statement mean?

What does mysql sub-conditional query statement mean?

青灯夜游
青灯夜游 Original
2020-10-07 12:52:04 2719browse

In mysql, you can call another table expression in a table expression. This called table expression is called a subquery (subquery) statement, also called a subselect (subselect) or an inline selection ( inner select). The results of the subquery are passed to the table expression that called it for further processing.

What does mysql sub-conditional query statement mean?

Subquery classification

1. Classification by returned result set

Subqueries are divided into four types according to the returned result sets: table subquery, row subquery, column subquery and scalar subquery.

  • Table subquery: The returned result set is a set of rows, N rows and N columns (N>=1). Table subqueries are often used in the FROM clause of a parent query.

  • Row subquery: The returned result set is a set of columns, one row with N columns (N>=1). Row subqueries can be used in the FROM clause and WHERE clause of a query.

  • Column subquery: The returned result set is a set of rows, with N rows and one column (N>=1).

  • Scalar subquery: The returned result set is a scalar set, one row and one column, which is a scalar value. Anywhere you can specify a scalar expression, you can use a scalar subquery.

By definition, each scalar subquery is also a row subquery and a column subquery, but not vice versa; each row subquery and column subquery is also a table subquery, Nor vice versa.

2. According to the calling method of the returned result

Subquery can be divided into where type subquery and from type subquery according to the calling method of the returned result set. and exists type subquery.

Where type subquery: (use the inner query result as the comparison condition of the outer query)

Definition: where type subquery uses the inner query result as the outer query Query conditions.

from type subquery: (the inner query result is provided for the outer query again)

Definition: from subquery is to treat the result of the subquery (a table in memory) as Make a temporary table and then process it.

Exists subquery: (Get the outer query results to the inner layer to see if the inner query is true)

Definition: The exists subquery is to loop through the outer table, and then The inner table performs inner query. Similar to in (), but they are still different. It mainly depends on the size difference between the two tables. If the subquery table is large, use exists (inner index), and if the subquery table is small, use in (outer index);

Use the subquery principle

1. A subquery must be placed in parentheses.

2. Place the subquery to the right of the comparison condition to increase readability.

The subquery does not contain an ORDER BY clause. Only one ORDER BY clause can be used with a SELECT statement, and if specified it must be placed at the end of the main SELECT statement.

3. Two comparison conditions can be used in subqueries: single-line operators (>, =, >=, ,

Instance analysis

1. Create a test table

CREATE TABLE PLAYERS (PLAYERNO INTEGER NOT NULL, NAME CHAR(15) NOT NULL, INITIALS CHAR(3) NOT NULL, BIRTH_DATE DATE , SEX CHAR(1) NOT NULL, JOINED SMALLINT NOT NULL, STREET VARCHAR(30) NOT NULL, HOUSENO CHAR(4) , POSTCODE CHAR(6) , TOWN VARCHAR(30) NOT NULL, PHONENO CHAR(13) , LEAGUENO CHAR(4) , PRIMARY KEY (PLAYERNO)); CREATE TABLE PENALTIES (PAYMENTNO INTEGER NOT NULL, PLAYERNO INTEGER NOT NULL, PAYMENT_DATE DATE NOT NULL, AMOUNT DECIMAL(7,2) NOT NULL, PRIMARY KEY (PAYMENTNO));

Note: Table Players is a basic table of player information, and penalties is a list of players with fine records.

2. Insert test data

INSERT INTO PLAYERS VALUES (2, 'Everett', 'R', '1948-09-01', 'M', 1975, 'Stoney Road','43', '3575NH', 'Stratford', '070-237893', '2411'); INSERT INTO PLAYERS VALUES (6, 'Parmenter', 'R', '1964-06-25', 'M', 1977, 'Haseltine Lane','80', '1234KK', 'Stratford', '070-476537', '8467'); INSERT INTO PLAYERS VALUES (7, 'Wise', 'GWS', '1963-05-11', 'M', 1981, 'Edgecombe Way','39', '9758VB', 'Stratford', '070-347689', NULL); INSERT INTO PLAYERS VALUES (8, 'Newcastle', 'B', '1962-07-08', 'F', 1980, 'Station Road','4', '6584WO', 'Inglewood', '070-458458', '2983'); INSERT INTO PLAYERS VALUES (27, 'Collins', 'DD', '1964-12-28', 'F', 1983, 'Long Drive','804', '8457DK', 'Eltham', '079-234857', '2513'); INSERT INTO PLAYERS VALUES (28, 'Collins', 'C', '1963-06-22', 'F', 1983, 'Old Main Road','10', '1294QK', 'Midhurst', '010-659599', NULL); INSERT INTO PLAYERS VALUES (39, 'Bishop', 'D', '1956-10-29', 'M', 1980, 'Eaton Square','78', '9629CD', 'Stratford', '070-393435', NULL); INSERT INTO PLAYERS VALUES (44, 'Baker', 'E', '1963-01-09', 'M', 1980, 'Lewis Street','23', '4444LJ', 'Inglewood', '070-368753', '1124'); INSERT INTO PLAYERS VALUES (57, 'Brown', 'M', '1971-08-17', 'M', 1985, 'Edgecombe Way','16', '4377CB', 'Stratford', '070-473458', '6409'); INSERT INTO PLAYERS VALUES (83, 'Hope', 'PK', '1956-11-11', 'M', 1982, 'Magdalene Road','16A', '1812UP', 'Stratford', '070-353548', '1608'); INSERT INTO PLAYERS VALUES (95, 'Miller', 'P', '1963-05-14', 'M', 1972, 'High Street','33A', '5746OP', 'Douglas', '070-867564', NULL); INSERT INTO PLAYERS VALUES (100, 'Parmenter', 'P', '1963-02-28', 'M', 1979, 'Haseltine Lane','80', '6494SG', 'Stratford', '070-494593', '6524'); INSERT INTO PLAYERS VALUES (104, 'Moorman', 'D', '1970-05-10', 'F', 1984, 'Stout Street','65', '9437AO', 'Eltham', '079-987571', '7060'); INSERT INTO PLAYERS VALUES (112, 'Bailey', 'IP', '1963-10-01', 'F', 1984, 'Vixen Road','8', '6392LK', 'Plymouth', '010-548745', '1319'); INSERT INTO PENALTIES VALUES (1, 6, '1980-12-08',100); INSERT INTO PENALTIES VALUES (2, 44, '1981-05-05', 75); INSERT INTO PENALTIES VALUES (3, 27, '1983-09-10',100); INSERT INTO PENALTIES VALUES (4,104, '1984-12-08', 50); INSERT INTO PENALTIES VALUES (5, 44, '1980-12-08', 25); INSERT INTO PENALTIES VALUES (6, 8, '1980-12-08', 25); INSERT INTO PENALTIES VALUES (7, 44, '1982-12-30', 30); INSERT INTO PENALTIES VALUES (8, 27, '1984-11-12', 75);

3. Table subquery example

For example: Get males with numbers less than 10 Player’s number

mysql> select playerno from ( select playerno, sex from players where playerno < 10) as players10 where sex='M';

What does mysql sub-conditional query statement mean?

##4. Row subquery example

For example: Get the same gender as player No. 100 and live in the same place City's player number.

mysql> select playerno from players where (sex, town) = ( select sex, town from players where playerno = 100);

What does mysql sub-conditional query statement mean?

Explanation: The result of the subquery is a row with two values: ('M','stratford'). This value is compared to a row expression (sex, town).

5 Scalar subquery example

Almost anywhere a scalar expression can be specified, a scalar subquery can be used.

For example: Get the number of the player who was born in the same year as player No. 27

mysql> select playerno from players where year(birth_date) = (select year(birth_date) from players where playerno = 27) and playerno <> 27;

What does mysql sub-conditional query statement mean?

The above statement is equivalent to:

mysql> select playerno from players where year(birth_date) = 1964 and playerno <> 27;

6 Column subquery example

Since the result set returned by the column subquery is N rows and one column, you cannot directly use = > = These comparison scalar results operator. IN, ANY (SOME) and ALL operators can be used in column subqueries:

IN: Within the specified item, the same as IN (item 1, item 2,...).

ANY:与比较操作符联合使用,ANY关键字必须接在一个比较操作符的后面,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE 。

SOME:ANY 的别名,较少使用。

ALL:与比较操作符联合使用,ALL关键字必须接在一个比较操作符的后面,表示与子查询返回的所有值比较都为 TRUE ,则返回 TRUE 。

实例1(in):获取球员性别为女的所有球员的球员号,名字及所在城市。

mysql> select playerno, name, town from players where playerno in (select playerno from players where sex = 'F');

What does mysql sub-conditional query statement mean?

实例2(any):获取至少比同城的另一球员年轻的所有球员的号码,日期和居住城市。

mysql> select playerno, birth_date, town from players as p1 where birth_date > any (select birth_date from players as p2 where p1.town = p2.town);

What does mysql sub-conditional query statement mean?

实例3(all):获取最老球员的号码,名字及生日。(即出生日期数值小于或等于所有其它球员的球员)

mysql> select playerno, name, birth_date from players where birth_date <= all (select birth_date from players);

What does mysql sub-conditional query statement mean?

7、exists型子查询

EXISTS关键字表示存在。使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值,如果内层查询语句查询到满足条件的记录,只要子查询中至少返回一个值,则EXISTS语句的值就为True。就返回true,否则返回false。当返回的值为true时,外层查询语句将进行查询,否则不进行查询。NOT EXISTS刚好与之相反。exists的用法和in ()差不多,但是它们还是有区别的。主要是看两个张表大小差的程度。若子查询表大则用exists(内层索引),子查询表小则用in(外层索引);

实例1(exists):获取那些至少支付了一次罚款的球员的名字和首字母。

mysql> select name, initials from players where exists (select * from penalties where playerno = players.playerno);

What does mysql sub-conditional query statement mean?

实例2(not exists):获取那些从来没有罚款的球员的名字和首字母。

mysql> select name, initials from players where not exists (select * from penalties where playerno = players.playerno);

What does mysql sub-conditional query statement mean?

推荐教程:mysql视频教程

The above is the detailed content of What does mysql sub-conditional query statement mean?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn