sql >> Database >  >> RDS >> Mysql

MySQL-zelfstudie:MySQL IN-instructie (geavanceerd)

Het basisgebruik van de MySQL IN-instructie gaat over het vergelijken van één kolom met meerdere waarden. Er zijn ook een aantal geavanceerde toepassingen van de MySQL IN-verklaring die interessante gebruiksscenario's opleveren. Overweeg de voorbeeldtabel user_table waarbij 5 gebruikers verschillende machtigingen krijgen toegewezen als admin, superuser, enz. gebaseerde waarden 1 of 0,

mysql> SELECT * FROM user_table;
+-----------+----------+--------------+----------+-----------+
| user_id   | is_admin | is_superuser | is_staff | is_active |
+-----------+----------+--------------+----------+-----------+
|    1      |    1     |       1      |     1    |     1     |
|    2      |    0     |       1      |     1    |     1     |
|    3      |    0     |       1      |     1    |     1     |
|    4      |    0     |       0      |     0    |     1     |
|    5      |    0     |       0      |     0    |     0     |
+-----------+----------+--------------+----------+-----------+

Gebruik Case 1:MySQL IN-instructie om een ​​waarde te vergelijken met meerdere kolommen

De syntaxis is:

SELECT * FROM TableName WHERE value IN (column1, column2, column3, column4)

Bijvoorbeeld

mysql> SELECT * FROM user_table WHERE 1 IN (is_admin, is_superuser, is_staff, is_active);

+-----------+----------+--------------+----------+-----------+
| user_id   | is_admin | is_superuser | is_staff | is_active |
+-----------+----------+--------------+----------+-----------+
|    1      |    1     |       1      |     1    |     1     |
|    2      |    0     |       1      |     1    |     1     |
|    3      |    0     |       1      |     1    |     1     |
|    4      |    0     |       0      |     0    |     1     |
+-----------+----------+--------------+----------+-----------+

Het gebruikelijke IN-statement omvat slechts ÉÉN KOLOM dat wordt vergeleken met meerdere waarden .

SELECT * FROM TableName WHERE column1 IN (1,2,3,4)

Het werkt als

SELECT  * FROM   TableName WHERE  column1 = 1 OR column1 = 2 OR column1 = 3 OR column1 = 4

Deze verklaring is EEN WAARDE dat is vergeleken met meerdere kolommen

SELECT * FROM TableName WHERE 1 IN (column1, column2, column3, column4)

is hetzelfde als

SELECT  * FROM   TableName WHERE  column1 = 1 OR column2 = 1 OR column3 = 1 OR column4 = 1

Gebruik Case 2:MySQL IN-instructie om meerdere kolommen met meerdere waarden te vergelijken

De syntaxis is:

SELECT * FROM TableName WHERE (column1,column2) in ((value1,value2),(value3,value4),..)

Bijvoorbeeld

mysql> SELECT * FROM user_table WHERE (is_staff,is_admin) in ((1,0),(1,1));
+-----------+----------+--------------+----------+-----------+
| user_id   | is_admin | is_superuser | is_staff | is_active |
+-----------+----------+--------------+----------+-----------+
|    1      |    1     |       1      |     1    |     1     |
|    2      |    0     |       1      |     1    |     1     |
+-----------+----------+--------------+----------+-----------+

Het werkt als

  1. MariaDB JSON_VALID() uitgelegd

  2. ORDER BY en GROUP BY samen gebruiken

  3. Ongeldige id-SQL

  4. Hoe rijnummer in MySQL te krijgen