SELECT column_name(s)
FROM table_name
WHERE column_name OPERATOR
( SELECT column_name(s)
FROM table_name )
SELECT * FROM courses WHERE teacher_id = (
SELECT id FROM teachers WHERE name = 'Western Venom'
);
mysql> SELECT * FROM courses WHERE teacher_id = (
-> SELECT id FROM teachers WHERE name = 'Western Venom'
-> );
+----+-------------------------+----------------+-------------+------------+
| id | name | student_count | created_at | teacher_id |
+----+-------------------------+----------------+-------------+------------+
| 2 | System Design | 135 | 2020-07-18 | 3 |
| 3 | Django | 78 | 2020-02-29 | 3 |
| 6 | Artificial Intelligence | 166 | 2018-05-13 | 3 |
| 7 | Java P6+ | 78 | 2019-01-19 | 3 |
+----+-------------------------+----------------+-------------+------------+
4 rows in set (0.01 sec)
SELECT name FROM teachers WHERE id = (
SELECT teacher_id FROM courses WHERE name = 'Big Data'
)
+-----------------+
| name |
+-----------------+
| Eastern Heretic |
+-----------------+
INSERT INTO table_name
SELECT colnum_name(s)
FROM table_name
[ WHERE colnum_name OPERATOR ]
INSERT INTO teachers_bkp
SELECT *
FROM teachers;
mysql> INSERT INTO teachers_bkp
-> SELECT *
-> FROM teachers;
Query OK, 5 rows affected (0.05 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM teachers_bkp;
+----+------------------+---------------------------+-----+---------+
| id | name | email | age | country |
+----+------------------+---------------------------+-----+---------+
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 20 | CN |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 3 | Western Venom | western.venom@163.com | 28 | USA |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | CN |
| 5 | Linghu Chong | NULL | 18 | CN |
+----+------------------+---------------------------+-----+---------+
5 rows in set (0.05 sec)
UPDATE table_name SET column_name = new_value
WHERE column_name OPERATOR
(SELECT column_name
FROM table_name [WHERE] )
UPDATE teachers
SET age = 21
WHERE id IN (
SELECT id
FROM teachers_bkp
WHERE age < 20
);
mysql> UPDATE teachers
-> SET age = 21
-> WHERE id IN (
-> SELECT id
-> FROM teachers_bkp
-> WHERE age < 20
-> );
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM teachers;
+----+------------------+---------------------------+-----+---------+
| id | name | email | age | country |
+----+------------------+---------------------------+-----+---------+
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 20 | CN |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 3 | Western Venom | western.venom@163.com | 28 | USA |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | CN |
| 5 | Linghu Chong | NULL | 21 | CN |
+----+------------------+---------------------------+-----+---------+
5 rows in set (0.01 sec)
DELETE FROM table_name
WHERE column_name OPERATOR
(SELECT column_name
FROM table_name [WHERE] )
DELETE FROM teachers
WHERE id IN (
SELECT id
FROM teachers_bkp
WHERE age < 20
);
mysql> DELETE FROM teachers
-> WHERE id IN (
-> SELECT id
-> FROM teachers_bkp
-> WHERE age < 20
-> );
Query OK, 1 row affected (0.02 sec)
mysql> SELECT * FROM teachers;
+----+------------------+---------------------------+-----+---------+
| id | name | email | age | country |
+----+------------------+---------------------------+-----+---------+
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 20 | CN |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 3 | Western Venom | western.venom@163.com | 28 | USA |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | CN |
+----+------------------+---------------------------+-----+---------+
4 rows in set (0.00 sec)
SELECT column_name(s)
FROM table_name
WHERE column_name in
(SELECT column_name
FROM table_name)
SELECT name
FROM courses
WHERE teacher_id IN
( SELECT id
FROM teachers
WHERE name = 'Eastern Heretic');
mysql> SELECT name
-> FROM courses
-> WHERE teacher_id IN
-> ( SELECT id
-> FROM teachers
-> WHERE name = 'Eastern Heretic');
+---------------------+
| name |
+---------------------+
| Big Data |
| Data Analysis |
| Dynamic Programming |
+---------------------+
3 rows in set (0.00 sec)
SELECT stname
FROM student
WHERE stid IN(SELECT DISTINCT stid
FROM score
WHERE score > ALL (SELECT score
FROM score
WHERE stid = (SELECT stid
FROM student
WHERE stname = 'Kaka')));
SELECT stname
FROM student
WHERE stid IN(SELECT DISTINCT stid
FROM score
WHERE score > ANY (SELECT score
FROM score
WHERE stid = (SELECT stid
FROM student
WHERE stname = 'Kaka')));
SELECT deptno,
ename,
job,
sal
FROM emp
WHERE (deptno,sal)
IN (
SELECT deptno,
Max(sal)
FROM emp
GROUP BY deptno
);
ELECT ename,job,sal,rownum
FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);
SELECT ename,job,sal,rownum
FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal)
WHERE rownum<=5;
SELECT deptno,
job,
Avg(sal)
FROM emp
GROUP BY deptno,
job
HAVING Avg(sal)>
(
SELECT sal
FROM emp
WHERE ename='MARTIN');
SELECT name FROM bbc
WHERE population>
(SELECT population FROM bbc
WHERE name='Russia')
SELECT * FROM bbc
WHERE region IN
(SELECT region FROM bbc
WHERE name IN ('India','Iran'))
SELECT name FROM bbc
WHERE region='Europe' AND gdp/population >
(SELECT gdp/population FROM bbc
WHERE name='United Kingdom')
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;
SELECT Websites.name,COUNT(access_log.aid) AS nums
FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;
SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
SELECT websites.NAME,
websites.url,
Sum(access_log.count) AS nums
FROM (access_log
INNER JOIN websites
ON access_log.site_id = websites.id)
GROUP BY websites.NAME
HAVING Sum(access_log.count) > 200;
SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;