当前位置: 首页 >数据库 > SQL必知必会1-13 读书笔记

SQL必知必会1-13 读书笔记

博主不想写字并向你仍来了一堆代码

 

1-6

SQL——结构化查询语言,Structured Query Language;

基本按列查询:

mysql> SELECT prod_id,prod_name,prod_desc-> FROM products-> ORDER BY prod_id;+---------+---------------------+-----------------------------------------------------------------------+| prod_id | prod_name| prod_desc |+---------+---------------------+-----------------------------------------------------------------------+| BNBG01  | Fish bean bag toy| Fish bean bag toy, complete with bean bag worms with which to feed it || BNBG02  | Bird bean bag toy| Bird bean bag toy, eggs are not included  || BNBG03  | Rabbit bean bag toy | Rabbit bean bag toy, comes with bean bag carrots  || BR01| 8 inch teddy bear| 8 inch teddy bear, comes with cap and jacket  || BR02| 12 inch teddy bear  | 12 inch teddy bear, comes with cap and jacket || BR03| 18 inch teddy bear  | 18 inch teddy bear, comes with cap and jacket || RGAN01  | Raggedy Ann | 18 inch Raggedy Ann doll  || RYL01| King doll| 12 inch king doll with royal garments and crown|| RYL02| Queen doll  | 12 inch queen doll with royal garments and crown  |+---------+---------------------+-----------------------------------------------------------------------+
mysql> SELECT prod_id,prod_name,prod_desc-> FROM products-> ORDER BY prod_price,prod_name;+---------+---------------------+-----------------------------------------------------------------------+| prod_id | prod_name| prod_desc |+---------+---------------------+-----------------------------------------------------------------------+| BNBG02  | Bird bean bag toy| Bird bean bag toy, eggs are not included  || BNBG01  | Fish bean bag toy| Fish bean bag toy, complete with bean bag worms with which to feed it || BNBG03  | Rabbit bean bag toy | Rabbit bean bag toy, comes with bean bag carrots  || RGAN01  | Raggedy Ann | 18 inch Raggedy Ann doll  || BR01| 8 inch teddy bear| 8 inch teddy bear, comes with cap and jacket  || BR02| 12 inch teddy bear  | 12 inch teddy bear, comes with cap and jacket || RYL01| King doll| 12 inch king doll with royal garments and crown|| RYL02| Queen doll  | 12 inch queen doll with royal garments and crown  || BR03| 18 inch teddy bear  | 18 inch teddy bear, comes with cap and jacket |+---------+---------------------+-----------------------------------------------------------------------+9 rows in set (0.00 sec)mysql> SELECT prod_id,prod_name,prod_desc-> FROM products-> ORDER BY prod_price,prod_name DESC;+---------+---------------------+-----------------------------------------------------------------------+| prod_id | prod_name| prod_desc |+---------+---------------------+-----------------------------------------------------------------------+| BNBG03  | Rabbit bean bag toy | Rabbit bean bag toy, comes with bean bag carrots  || BNBG01  | Fish bean bag toy| Fish bean bag toy, complete with bean bag worms with which to feed it || BNBG02  | Bird bean bag toy| Bird bean bag toy, eggs are not included  || RGAN01  | Raggedy Ann | 18 inch Raggedy Ann doll  || BR01| 8 inch teddy bear| 8 inch teddy bear, comes with cap and jacket  || BR02| 12 inch teddy bear  | 12 inch teddy bear, comes with cap and jacket || RYL02| Queen doll  | 12 inch queen doll with royal garments and crown  || RYL01| King doll| 12 inch king doll with royal garments and crown|| BR03| 18 inch teddy bear  | 18 inch teddy bear, comes with cap and jacket |+---------+---------------------+-----------------------------------------------------------------------+

 高级一点的过滤查询,WHERE,ORDER,IN,NOT,AND,OR,BETWEEN,NULL:

mysql> SELECT prod_id,prod_name,prod_desc-> FROM products-> WHERE prod_price IS NULL;Empty set (0.00 sec)mysql> SELECT prod_id,prod_name,prod_desc-> FROM products-> WHERE (vend_id <> 'DLL01' OR  prod_id LIKE 'BR%') AND prod_price BETWEEN 3 AND 10;+---------+--------------------+--------------------------------------------------+| prod_id | prod_name  | prod_desc|+---------+--------------------+--------------------------------------------------+| BR01| 8 inch teddy bear  | 8 inch teddy bear, comes with cap and jacket || BR02| 12 inch teddy bear | 12 inch teddy bear, comes with cap and jacket|| RYL01| King doll  | 12 inch king doll with royal garments and crown  || RYL02| Queen doll | 12 inch queen doll with royal garments and crown |+---------+--------------------+--------------------------------------------------+4 rows in set (0.00 sec)mysql> SELECT prod_id,prod_name,prod_desc-> FROM products-> WHERE vend_id IN ('DLL01','BRS01')-> ORDER BY prod_name;+---------+---------------------+-----------------------------------------------------------------------+| prod_id | prod_name| prod_desc |+---------+---------------------+-----------------------------------------------------------------------+| BR02| 12 inch teddy bear  | 12 inch teddy bear, comes with cap and jacket || BR03| 18 inch teddy bear  | 18 inch teddy bear, comes with cap and jacket || BR01| 8 inch teddy bear| 8 inch teddy bear, comes with cap and jacket  || BNBG02  | Bird bean bag toy| Bird bean bag toy, eggs are not included  || BNBG01  | Fish bean bag toy| Fish bean bag toy, complete with bean bag worms with which to feed it || BNBG03  | Rabbit bean bag toy | Rabbit bean bag toy, comes with bean bag carrots  || RGAN01  | Raggedy Ann | 18 inch Raggedy Ann doll  |+---------+---------------------+-----------------------------------------------------------------------+7 rows in set (0.00 sec)mysql> SELECT prod_id,prod_name,prod_desc-> FROM products-> WHERE vend_id NOT IN ('DLL01','BRS01')-> ORDER BY prod_name;+---------+------------+--------------------------------------------------+| prod_id | prod_name  | prod_desc|+---------+------------+--------------------------------------------------+| RYL01| King doll  | 12 inch king doll with royal garments and crown  || RYL02| Queen doll | 12 inch queen doll with royal garments and crown |+---------+------------+--------------------------------------------------+2 rows in set (0.00 sec)

 

通配符,%,_,[](实测MySQL我这里不支持。。。)

不要过分使用通配符(和*一样)

不要把通配符放在搜索的开始处

mysql> SELECT prod_id,prod_name,prod_desc-> FROM products-> WHERE prod_name LIKE '__ inch teddy bear' OR prod_name LIKE 'Fish%';+---------+--------------------+-----------------------------------------------------------------------+| prod_id | prod_name  | prod_desc |+---------+--------------------+-----------------------------------------------------------------------+| BR02| 12 inch teddy bear | 12 inch teddy bear, comes with cap and jacket || BR03| 18 inch teddy bear | 18 inch teddy bear, comes with cap and jacket || BNBG01  | Fish bean bag toy  | Fish bean bag toy, complete with bean bag worms with which to feed it |+---------+--------------------+-----------------------------------------------------------------------+3 rows in set (0.00 sec)mysql> SELECT *-> FROM customers;+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+| cust_id| cust_name | cust_address | cust_city | cust_state | cust_zip | cust_country | cust_contact| cust_email|+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+| 1000000001 | Village Toys  | 200 Maple Lane| Detroit| MI | 44444| USA  | John Smith | sales@villagetoys.com || 1000000002 | Kids Place| 333 South Lake Drive | Columbus  | OH | 43333| USA  | Michelle Green | NULL  || 1000000003 | Fun4All| 1 Sunny Place| Muncie| IN | 42222| USA  | Jim Jones  | jjones@fun4all.com|| 1000000004 | Fun4All| 829 Riverside Drive  | Phoenix| AZ | 88888| USA  | Denise L. Stephens | dstephens@fun4all.com || 1000000005 | The Toy Store | 4545 53rd Street | Chicago| IL | 54545| USA  | Kim Howard | NULL  |+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+5 rows in set (0.00 sec)mysql> SELECT cust_contact-> FROM customers-> WHERE cust_contact LIKE '[JM]%'-> ORDER BY cust_id;Empty set (0.00 sec)mysql> SELECT cust_contact-> FROM customers-> WHERE cust_contact LIKE '[JM]%'-> ORDER BY cust_contact;Empty set (0.00 sec)mysql> SELECT cust_contact-> FROM customers-> WHERE cust_contact LIKE '[^JM]%'-> ORDER BY cust_contact;Empty set (0.00 sec)

 

 

MySQL的计算字段:CONCAT(),+-*/,AS,TRIM()

别个DB可能是+或者||,更好读??不是很懂,反正MySQL不得行

mysql> SELECT vend_name + '('+vend_country+')'-> FROM vendors-> ORDER BY vend_name;+----------------------------------+| vend_name + '('+vend_country+')' |+----------------------------------+|0 ||0 ||0 ||0 ||0 ||0 |+----------------------------------+6 rows in set, 24 waings (0.00 sec)mysql> SELECT vend_name + '|' + vend_country + '|'-> FROM vendors-> ORDER BY vend_name;+--------------------------------------+| vend_name + '|' + vend_country + '|' |+--------------------------------------+|0 ||0 ||0 ||0 ||0 ||0 |+--------------------------------------+6 rows in set, 24 waings (0.00 sec)mysql> SELECT * FROM vendors;+---------+-----------------+-----------------+------------+------------+----------+--------------+| vend_id | vend_name| vend_address| vend_city  | vend_state | vend_zip | vend_country |+---------+-----------------+-----------------+------------+------------+----------+--------------+| BRS01| Bears R Us  | 123 Main Street | Bear Town  | MI | 44444| USA  || BRE02| Bear Emporium| 500 Park Street | Anytown| OH | 44333| USA  || DLL01| Doll House Inc. | 555 High Street | Dollsville | CA | 99999| USA  || FRB01| Furball Inc.| 1000 5th Avenue | New York| NY | 11111| USA  || FNG01| Fun and Games| 42 Galaxy Road  | London | NULL| N16 6PS  | England  || JTS01| Jouets et ours  | 1 Rue Amusement | Paris  | NULL| 45678| France|+---------+-----------------+-----------------+------------+------------+----------+--------------+6 rows in set (0.00 sec)mysql> SELECT vend_name || ' ( '||vend_country || ' )  '-> FROM vendors-> ORDER BY vend_name;+--------------------------------------------+| vend_name || ' ( '||vend_country || ' )  ' |+--------------------------------------------+|  0 ||  0 ||  0 ||  0 ||  0 ||  0 |+--------------------------------------------+6 rows in set, 24 waings (0.00 sec)mysql> SELECT CONCAT(vend_name,vend_country)-> FROM vendors-> ORDER BY vend_name;+--------------------------------+| CONCAT(vend_name,vend_country) |+--------------------------------+| Bear EmporiumUSA|| Bears R UsUSA  || Doll House Inc.USA || Fun and GamesEngland|| Furball Inc.USA|| Jouets et oursFrance|+--------------------------------+6 rows in set (0.00 sec)mysql> SELECT CONCAT(vend_name,'(',vend_country,')')-> FROM vendors-> ORDER BY vend_name;+----------------------------------------+| CONCAT(vend_name,'(',vend_country,')') |+----------------------------------------+| Bear Emporium(USA) || Bears R Us(USA)|| Doll House Inc.(USA)|| Fun and Games(England) || Furball Inc.(USA)  || Jouets et ours(France) |+----------------------------------------+6 rows in set (0.00 sec)mysql> SELECT vend_name,->CONCAT(vend_address,',',vend_city,',',vend_state,',',vend_country) AS VendorsInfo,->vend_zip-> FROM vendors-> ORDER BY vend_zip,vend_name DESC;+-----------------+-----------------------------------+----------+| vend_name| VendorsInfo| vend_zip |+-----------------+-----------------------------------+----------+| Furball Inc.| 1000 5th Avenue,New York,NY,USA| 11111|| Bear Emporium| 500 Park Street,Anytown,OH,USA| 44333|| Bears R Us  | 123 Main Street,Bear Town,MI,USA  | 44444|| Jouets et ours  | NULL  | 45678|| Doll House Inc. | 555 High Street,Dollsville,CA,USA | 99999|| Fun and Games| NULL  | N16 6PS  |+-----------------+-----------------------------------+----------+6 rows in set (0.00 sec)mysql> SELECT prod_id,quantity,item_price,->quantity*item_price AS sum_price-> FROM orderitems-> WHERE order_num=20008;+---------+----------+------------+-----------+| prod_id | quantity | item_price | sum_price |+---------+----------+------------+-----------+| RGAN01  |5 |4.99 | 24.95 || BR03|5 |  11.99 | 59.95 || BNBG01  |10 |3.49 | 34.90 || BNBG02  |10 |3.49 | 34.90 || BNBG03  |10 |3.49 | 34.90 |+---------+----------+------------+-----------+5 rows in set (0.00 sec)

 

使用数据处理函数:CURDATE(),YEAR(),UPPER(),TRIM(),ABS()

不同的DBMS的函数不是很一样,所以,使用函数的SQL代码移植性不好,如果一定要用,记得写清楚注释:

mysql> SELECT CONCAT(prod_name,'+',CURDATE())-> FROM products;+---------------------------------+| CONCAT(prod_name,'+',CURDATE()) |+---------------------------------+| 8 inch teddy bear+2016-08-04|| 12 inch teddy bear+2016-08-04|| 18 inch teddy bear+2016-08-04|| Fish bean bag toy+2016-08-04|| Bird bean bag toy+2016-08-04|| Rabbit bean bag toy+2016-08-04  || Raggedy Ann+2016-08-04  || King doll+2016-08-04|| Queen doll+2016-08-04|+---------------------------------+9 rows in set (0.00 sec)mysql> SELECT order_num-> FROM orders-> WHERE YEAR(order_date)=2004;+-----------+| order_num |+-----------+| 20005 || 20006 || 20007 || 20008 || 20009 |+-----------+5 rows in set (0.00 sec)mysql> SELECT UPPER(price_name) AS Name,prod_price-> FROM products-> ORDER BY prod_name;ERROR 1054 (42S22): Unknown column 'price_name' in 'field list'mysql> SELECT UPPER(prod_name) AS Name,prod_price-> FROM products-> ORDER BY prod_name;+---------------------+------------+| Name| prod_price |+---------------------+------------+| 12 INCH TEDDY BEAR  |8.99 || 18 INCH TEDDY BEAR  |  11.99 || 8 INCH TEDDY BEAR|5.99 || BIRD BEAN BAG TOY|3.49 || FISH BEAN BAG TOY|3.49 || KING DOLL|9.49 || QUEEN DOLL  |9.49 || RABBIT BEAN BAG TOY |3.49 || RAGGEDY ANN |4.99 |+---------------------+------------+9 rows in set (0.00 sec)

 

 

聚集函数:COUNT(),AVG(),MAX(),MIN(),SUM():

mysql> SELECT UPPER(prod_name) AS P_Name,AVG(prod_price) AS P_Price-> FROM products-> WHERE prod_price BETWEEN 2 AND 10;+-------------------+----------+| P_Name| P_Price  |+-------------------+----------+| 8 INCH TEDDY BEAR | 6.177500 |+-------------------+----------+1 row in set (0.00 sec)mysql> SELECT UPPER(prod_name) AS P_Name,AVG(prod_price) AS P_Price-> FROM products;+-------------------+----------+| P_Name| P_Price  |+-------------------+----------+| 8 INCH TEDDY BEAR | 6.823333 |+-------------------+----------+1 row in set (0.00 sec)mysql> SELECT AVG(prod_price) AS P_Price-> FROM products;+----------+| P_Price  |+----------+| 6.823333 |+----------+1 row in set (0.00 sec)mysql> SELECT COUNT(*) AS num_cust-> FROM customers;+----------+| num_cust |+----------+|5 |+----------+1 row in set (0.00 sec)mysql> SELECT COUNT(*) AS Items,->AVG(DISTINCT prod_price) AS price_avg,->MAX(prod_price) AS price_max,->MIN(prod_price) AS price_min-> FROM products;+-------+-----------+-----------+-----------+| Items | price_avg | price_max | price_min |+-------+-----------+-----------+-----------+| 9 |  7.490000 | 11.99 |  3.49 |+-------+-----------+-----------+-----------+1 row in set (0.00 sec)

 

 

分组:GROUP BY,HAVING;注意各种语句的顺序问题SELECT->FROM->WHERE->GROUP BY->HAVING->ORDER BY

 mysql> SELECT prod_name,COUNT(*) AS num_prod 
-> FROM products-> GROUP BY vend_id;+-------------------+----------+| prod_name | num_prod |+-------------------+----------+| 8 inch teddy bear |3 || Fish bean bag toy |4 || King doll |2 |+-------------------+----------+3 rows in set (0.00 sec)mysql> SELECT prod_price,COUNT(*) AS num_price-> FROM products-> GROUP BY prod_price;+------------+-----------+| prod_price | num_price |+------------+-----------+|3.49 | 3 ||4.99 | 1 ||5.99 | 1 ||8.99 | 1 ||9.49 | 2 || 11.99 | 1 |+------------+-----------+6 rows in set (0.00 sec)mysql> SELECT prod_price,COUNT(*) AS num_price-> FROM products-> GROUP BY prod_price-> HAVING COUNT(*)>=2-> ORDER BY prod_price DESC;+------------+-----------+| prod_price | num_price |+------------+-----------+|9.49 | 2 ||3.49 | 3 |+------------+-----------+2 rows in set (0.00 sec)mysql> SELECT prod_name,COUNT(*) AS num_prod-> FROM products-> WHERE prod_price>=3-> GROUP BY prod_name-> HAVING COUNT(*)>=2-> ORDER BY prod_price DESC;Empty set (0.00 sec)mysql> SELECT prod_name,prod_price,COUNT(*) AS num_prod-> FROM products-> GROUP BY prod_name;+---------------------+------------+----------+| prod_name| prod_price | num_prod |+---------------------+------------+----------+| 12 inch teddy bear |8.99 |1 || 18 inch teddy bear | 11.99 |1 || 8 inch teddy bear|5.99 |1 || Bird bean bag toy|3.49 |1 || Fish bean bag toy|3.49 |1 || King doll|9.49 |1 || Queen doll |9.49 |1 || Rabbit bean bag toy |3.49 |1 || Raggedy Ann |4.99 |1 |+---------------------+------------+----------+9 rows in set (0.00 sec)mysql> SELECT prod_name,prod_price,COUNT(*) AS num_prod-> FROM products-> GROUP BY prod_price;+--------------------+------------+----------+| prod_name | prod_price | num_prod |+--------------------+------------+----------+| Fish bean bag toy |3.49 |3 || Raggedy Ann|4.99 |1 || 8 inch teddy bear |5.99 |1 || 12 inch teddy bear |8.99 |1 || King doll |9.49 |2 || 18 inch teddy bear | 11.99 |1 |+--------------------+------------+----------+6 rows in set (0.00 sec)

 

11-使用子查询:始终记得由内向外,由特殊到一般

mysql> SELECT order_num-> FROM orderitems-> WHERE prod_id='RGAN01';+-----------+| order_num |+-----------+| 20007 || 20008 |+-----------+2 rows in set (0.04 sec)mysql> SELECT cust_id-> FROM orders-> WHERE order_num IN (20007,20008);+------------+| cust_id|+------------+| 1000000004 || 1000000005 |+------------+2 rows in set (0.02 sec)mysql> SELECT cust_id-> FROM orders-> WHERE order_num IN(SELECT order_num)->  ;+------------+| cust_id|+------------+| 1000000001 || 1000000001 || 1000000003 || 1000000004 || 1000000005 |+------------+5 rows in set (0.03 sec)mysql> SELECT cust_id-> FROM orders-> WHERE order_num IN(SELECT order_num->FROM orderitems->WHERE prod_id='RGAN01');+------------+| cust_id|+------------+| 1000000004 || 1000000005 |+------------+2 rows in set (0.00 sec)mysql> SELECT COUNT(*)-> FROM orders-> WHERE cust_id='1000000001';+----------+| COUNT(*) |+----------+|2 |+----------+1 row in set (0.00 sec)mysql> SELECT cust_name,cust_state,->(SELECT COUNT(*)->FROM orders->WHERE orders.cust_id=customers.cust_id) AS orders-> FROM customers-> ORDER BY cust_name;+---------------+------------+--------+| cust_name | cust_state | orders |+---------------+------------+--------+| Fun4All| IN |  1 || Fun4All| AZ |  1 || Kids Place| OH |  0 || The Toy Store | IL |  1 || Village Toys  | MI |  2 |+---------------+------------+--------+5 rows in set (0.00 sec)mysql> SELECT cust_name,cust_state,->(SELECT COUNT(*)->FROM orders->WHERE cust_id=cust_id) AS orders-> FROM customers-> ORDER BY cust_name;+---------------+------------+--------+| cust_name | cust_state | orders |+---------------+------------+--------+| Fun4All| IN |  5 || Fun4All| AZ |  5 || Kids Place| OH |  5 || The Toy Store | IL |  5 || Village Toys  | MI |  5 |+---------------+------------+--------+5 rows in set (0.00 sec)

 

 

12-联结表:注意和子查询的关系,INNER JOIN

mysql> SELECT vend_name,prod_name,prod_price-> FROM vendors,products-> WHERE vendors.vend_id=products.vend_id;+-----------------+---------------------+------------+| vend_name| prod_name| prod_price |+-----------------+---------------------+------------+| Bears R Us  | 8 inch teddy bear|5.99 || Bears R Us  | 12 inch teddy bear  |8.99 || Bears R Us  | 18 inch teddy bear  |  11.99 || Doll House Inc. | Fish bean bag toy|3.49 || Doll House Inc. | Bird bean bag toy|3.49 || Doll House Inc. | Rabbit bean bag toy |3.49 || Doll House Inc. | Raggedy Ann |4.99 || Fun and Games| King doll|9.49 || Fun and Games| Queen doll  |9.49 |+-----------------+---------------------+------------+9 rows in set (0.00 sec)mysql> SELECT vend_name,prod_name,prod_price-> FROM vendors,products;+-----------------+---------------------+------------+| vend_name| prod_name| prod_price |+-----------------+---------------------+------------+| Bear Emporium| Fish bean bag toy|3.49 || Bears R Us  | Fish bean bag toy|3.49 || Doll House Inc. | Fish bean bag toy|3.49 || Fun and Games| Fish bean bag toy|3.49 || Furball Inc.| Fish bean bag toy|3.49 || Jouets et ours  | Fish bean bag toy|3.49 || Bear Emporium| Bird bean bag toy|3.49 || Bears R Us  | Bird bean bag toy|3.49 || Doll House Inc. | Bird bean bag toy|3.49 || Fun and Games| Bird bean bag toy|3.49 || Furball Inc.| Bird bean bag toy|3.49 || Jouets et ours  | Bird bean bag toy|3.49 || Bear Emporium| Rabbit bean bag toy |3.49 || Bears R Us  | Rabbit bean bag toy |3.49 || Doll House Inc. | Rabbit bean bag toy |3.49 || Fun and Games| Rabbit bean bag toy |3.49 || Furball Inc.| Rabbit bean bag toy |3.49 || Jouets et ours  | Rabbit bean bag toy |3.49 || Bear Emporium| 8 inch teddy bear|5.99 || Bears R Us  | 8 inch teddy bear|5.99 || Doll House Inc. | 8 inch teddy bear|5.99 || Fun and Games| 8 inch teddy bear|5.99 || Furball Inc.| 8 inch teddy bear|5.99 || Jouets et ours  | 8 inch teddy bear|5.99 || Bear Emporium| 12 inch teddy bear  |8.99 || Bears R Us  | 12 inch teddy bear  |8.99 || Doll House Inc. | 12 inch teddy bear  |8.99 || Fun and Games| 12 inch teddy bear  |8.99 || Furball Inc.| 12 inch teddy bear  |8.99 || Jouets et ours  | 12 inch teddy bear  |8.99 || Bear Emporium| 18 inch teddy bear  |  11.99 || Bears R Us  | 18 inch teddy bear  |  11.99 || Doll House Inc. | 18 inch teddy bear  |  11.99 || Fun and Games| 18 inch teddy bear  |  11.99 || Furball Inc.| 18 inch teddy bear  |  11.99 || Jouets et ours  | 18 inch teddy bear  |  11.99 || Bear Emporium| Raggedy Ann |4.99 || Bears R Us  | Raggedy Ann |4.99 || Doll House Inc. | Raggedy Ann |4.99 || Fun and Games| Raggedy Ann |4.99 || Furball Inc.| Raggedy Ann |4.99 || Jouets et ours  | Raggedy Ann |4.99 || Bear Emporium| King doll|9.49 || Bears R Us  | King doll|9.49 || Doll House Inc. | King doll|9.49 || Fun and Games| King doll|9.49 || Furball Inc.| King doll|9.49 || Jouets et ours  | King doll|9.49 || Bear Emporium| Queen doll  |9.49 || Bears R Us  | Queen doll  |9.49 || Doll House Inc. | Queen doll  |9.49 || Fun and Games| Queen doll  |9.49 || Furball Inc.| Queen doll  |9.49 || Jouets et ours  | Queen doll  |9.49 |+-----------------+---------------------+------------+54 rows in set (0.03 sec)mysql> SELECT vend_name,prod_name,prod_price-> FROM vendors INNER JOIN products->ON vendors.vend_id=products.vend_id;+-----------------+---------------------+------------+| vend_name| prod_name| prod_price |+-----------------+---------------------+------------+| Bears R Us  | 8 inch teddy bear|5.99 || Bears R Us  | 12 inch teddy bear  |8.99 || Bears R Us  | 18 inch teddy bear  |  11.99 || Doll House Inc. | Fish bean bag toy|3.49 || Doll House Inc. | Bird bean bag toy|3.49 || Doll House Inc. | Rabbit bean bag toy |3.49 || Doll House Inc. | Raggedy Ann |4.99 || Fun and Games| King doll|9.49 || Fun and Games| Queen doll  |9.49 |+-----------------+---------------------+------------+9 rows in set (0.00 sec)mysql> SELECT cust_name,cust_contact-> FROM customers,orders,orderitems-> WHERE orders.cust_id=customers.cust_id->AND orderitems.order_num=customers.order_num->AND prod_id='RGAN01';ERROR 1054 (42S22): Unknown column 'customers.order_num' in 'where clause'mysql> SELECT cust_name,cust_contact-> FROM customers,orders,orderitems-> WHERE orders.cust_id=customers.cust_id->AND orderitems.order_num=orders.order_num->AND prod_id='RGAN01';+---------------+--------------------+| cust_name | cust_contact|+---------------+--------------------+| Fun4All| Denise L. Stephens || The Toy Store | Kim Howard |+---------------+--------------------+2 rows in set (0.00 sec)mysql> SELECT cust_name,cust_contact-> FROM customers-> WHERE cust_id IN (SELECT cust_id->FROM orders->WHERE order_num IN (SELECT order_num-> FROM orderitems-> WHERE prod_id='RGAN01'));+---------------+--------------------+| cust_name | cust_contact|+---------------+--------------------+| Fun4All| Denise L. Stephens || The Toy Store | Kim Howard |+---------------+--------------------+2 rows in set (0.00 sec)

 

 

13-高级联结:表别名(防止歧义),自联结,INNER JOIN,LEFT/RIGHT JOIN(需要那些没有关联行的行)(PS.MySQL中好像没有FULL OUTER JOIN和*=表示)

mysql> SELECT C.cust_id,C.cust_name,COUNT(*)-> FROM customers AS C,orders AS O-> WHERE C.cust_id=O.cust_id;+------------+--------------+----------+| cust_id| cust_name| COUNT(*) |+------------+--------------+----------+| 1000000001 | Village Toys |5 |+------------+--------------+----------+1 row in set (0.02 sec)mysql> SELECT C.cust_id,C.cust_name,COUNT(*)-> FROM customers AS C,orders AS O-> WHERE C.cust_id=O.cust_id-> GROUP BY O.cust_name;ERROR 1054 (42S22): Unknown column 'O.cust_name' in 'group statement'mysql> SELECT C.cust_id,C.cust_name,COUNT(*)-> FROM customers AS C,orders AS O-> WHERE C.cust_id=O.cust_id-> GROUP BY O.cust_id;+------------+---------------+----------+| cust_id| cust_name | COUNT(*) |+------------+---------------+----------+| 1000000001 | Village Toys  |2 || 1000000003 | Fun4All|1 || 1000000004 | Fun4All|1 || 1000000005 | The Toy Store |1 |+------------+---------------+----------+4 rows in set (0.00 sec)mysql> SELECT prod_id,prod_name,COUNT(*)-> FROM products;+---------+-------------------+----------+| prod_id | prod_name | COUNT(*) |+---------+-------------------+----------+| BNBG01  | Fish bean bag toy |9 |+---------+-------------------+----------+1 row in set (0.00 sec)mysql> SELECT prod_id,prod_name,COUNT(*)-> FROM products-> GROUP BY prod_name;+---------+---------------------+----------+| prod_id | prod_name| COUNT(*) |+---------+---------------------+----------+| BR02| 12 inch teddy bear  |1 || BR03| 18 inch teddy bear  |1 || BR01| 8 inch teddy bear|1 || BNBG02  | Bird bean bag toy|1 || BNBG01  | Fish bean bag toy|1 || RYL01| King doll|1 || RYL02| Queen doll  |1 || BNBG03  | Rabbit bean bag toy |1 || RGAN01  | Raggedy Ann |1 |+---------+---------------------+----------+9 rows in set (0.00 sec)mysql> SELECT P.prod_id,P.prod_name,COUNT(*)-> FROM products,orderitems-> WHERE orderitems.prod_id=products.prod_id-> GROUP BY prod_name-> ORDER BY prod_id;ERROR 1054 (42S22): Unknown column 'P.prod_id' in 'field list'mysql> SELECT P.prod_id,P.prod_name,COUNT(*)-> FROM products AS P,orderitems AS O-> WHERE orderitems.prod_id=products.prod_id-> GROUP BY prod_name-> ORDER BY prod_id;ERROR 1054 (42S22): Unknown column 'orderitems.prod_id' in 'where clause'mysql> SELECT P.prod_id,P.prod_name,COUNT(*)-> FROM products AS P,orderitems AS O-> WHERE O.prod_id=P.prod_id-> GROUP BY P.prod_name-> ORDER BY P.prod_id;+---------+---------------------+----------+| prod_id | prod_name| COUNT(*) |+---------+---------------------+----------+| BNBG01  | Fish bean bag toy|3 || BNBG02  | Bird bean bag toy|3 || BNBG03  | Rabbit bean bag toy |3 || BR01| 8 inch teddy bear|2 || BR02| 12 inch teddy bear  |1 || BR03| 18 inch teddy bear  |4 || RGAN01  | Raggedy Ann |2 |+---------+---------------------+----------+7 rows in set (0.00 sec)mysql> SELECT P.prod_id,P.prod_name,SUM(O.quantity)-> FROM products AS P,orderitems AS O-> WHERE O.prod_id=P.prod_id-> GROUP BY P.prod_name-> ORDER BY P.prod_id;+---------+---------------------+-----------------+| prod_id | prod_name| SUM(O.quantity) |+---------+---------------------+-----------------+| BNBG01  | Fish bean bag toy| 360 || BNBG02  | Bird bean bag toy| 360 || BNBG03  | Rabbit bean bag toy | 360 || BR01| 8 inch teddy bear| 120 || BR02| 12 inch teddy bear  |  10 || BR03| 18 inch teddy bear  | 165 || RGAN01  | Raggedy Ann |  55 |+---------+---------------------+-----------------+7 rows in set (0.00 sec)mysql> SELECT C.cust_id,O.order_num-> FROM customers AS C,orders AS O-> ;+------------+-----------+| cust_id| order_num |+------------+-----------+| 1000000001 | 20005 || 1000000002 | 20005 || 1000000003 | 20005 || 1000000004 | 20005 || 1000000005 | 20005 || 1000000001 | 20009 || 1000000002 | 20009 || 1000000003 | 20009 || 1000000004 | 20009 || 1000000005 | 20009 || 1000000001 | 20006 || 1000000002 | 20006 || 1000000003 | 20006 || 1000000004 | 20006 || 1000000005 | 20006 || 1000000001 | 20007 || 1000000002 | 20007 || 1000000003 | 20007 || 1000000004 | 20007 || 1000000005 | 20007 || 1000000001 | 20008 || 1000000002 | 20008 || 1000000003 | 20008 || 1000000004 | 20008 || 1000000005 | 20008 |+------------+-----------+25 rows in set (0.00 sec)mysql> SELECT C.cust_id,O.order_num-> FROM customers AS C LEFT OUTER JOIN orders AS O->ON C.cust_id=O.cust_id;+------------+-----------+| cust_id| order_num |+------------+-----------+| 1000000001 | 20005 || 1000000001 | 20009 || 1000000002 |  NULL || 1000000003 | 20006 || 1000000004 | 20007 || 1000000005 | 20008 |+------------+-----------+6 rows in set (0.00 sec)mysql> SELECT C.cust_id,O.order_num-> FROM customers AS C RIGHT OUTER JOIN orders AS O->ON C.cust_id=O.cust_id;+------------+-----------+| cust_id| order_num |+------------+-----------+| 1000000001 | 20005 || 1000000001 | 20009 || 1000000003 | 20006 || 1000000004 | 20007 || 1000000005 | 20008 |+------------+-----------+5 rows in set (0.00 sec)mysql> SELECT C.cust_id,O.cust_id-> FROM customers AS C,orders AS O-> WHERE C.cust_id *= O.cust_id;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= O.cust_id' at line 3mysql> SELECT C.cust_id,O.order_num-> FROM customers AS C FULL OUTER JOIN orders AS O->ON C.cust_id=O.cust_id;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL OUTER JOIN orders AS O  ON C.cust_id=O.cust_id' at line 2mysql> SELECT C.cust_id,O.order_num-> FROM customers AS C LEFT OUTER JOIN orders AS O->ON C.cust_id=O.cust_id;+------------+-----------+| cust_id| order_num |+------------+-----------+| 1000000001 | 20005 || 1000000001 | 20009 || 1000000002 |  NULL || 1000000003 | 20006 || 1000000004 | 20007 || 1000000005 | 20008 |+------------+-----------+6 rows in set (0.00 sec)mysql>  SELECT P.prod_id,P.prod_name,SUM(O.quantity)-> -> FROM products AS P,orderitems AS O-> -> WHERE O.prod_id=P.prod_id-> -> GROUP BY P.prod_name-> -> ORDER BY P.prod_id;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '> FROM products AS P,orderitems AS O-> WHERE O.prod_id=P.prod_id-> GRO' at line 2mysql> SELECT P.prod_id,P.prod_name,SUM(O.quantity)-> FROM products AS P LEFT OUTER JOIN orderitems AS O->ON O.prod_id=P.prod_id-> GROUP BY P.prod_name-> ORDER BY P.prod_id;+---------+---------------------+-----------------+| prod_id | prod_name| SUM(O.quantity) |+---------+---------------------+-----------------+| BNBG01  | Fish bean bag toy| 360 || BNBG02  | Bird bean bag toy| 360 || BNBG03  | Rabbit bean bag toy | 360 || BR01| 8 inch teddy bear| 120 || BR02| 12 inch teddy bear  |  10 || BR03| 18 inch teddy bear  | 165 || RGAN01  | Raggedy Ann |  55 || RYL01| King doll|NULL || RYL02| Queen doll  |NULL |+---------+---------------------+-----------------+9 rows in set (0.00 sec)

 

作者:韧还
来源链接:https://www.cnblogs.com/andy1202go/p/5737144.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/118443.html

分享给朋友:

“SQL必知必会1-13 读书笔记” 的相关文章

mysql递归查询 2022年06月06日 18:26:30
mysql查询结果中文显示成了问号 2022年06月07日 02:00:43
Mysql 查询结果赋值到变量 2022年06月07日 12:35:42
mysql 查询表中前10条数据 2022年06月08日 04:35:17
MYSQL查询空值/NULL值 2022年06月08日 16:44:33