如果你忘记了数据库或表的名字,或者表的结构(例如,表的列名叫什么),MySQL通过一些语句,提供了关于数据库和表的信息,解决了这些问题。
SHOW DATABASES, 这会列出数据库。要找到当前正选择的数据库,使用DATABASE()方法:
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| menagerie |
+------------+
如果你还没有任何数据库,结果是NULL。
要找到默认数据库包含的表(例如,当你对一个表的名字不太确定时),使用这个语句:
mysql> SHOW TABLES;
+---------------------+
| Tables_in_menagerie |
+---------------------+
| event |
| pet |
+---------------------+
在输出中,列的名字为Tables_in_db_name,其中db_name部分为当前数据库名字。
如果你想看一个表的结构,DESCRIBE语句是有用的,它显示一个表的每一个列的信息:
mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
Field表示列名,Type表示对应列的数据类型,NULL表示此列是否NULL值,Key代表此列是否为索引,Default指定列的默认值。Extra显示关于列的指定信息。如果一个列是被创建为AUTO_INCREMENT,则这个值将为auto_increment,而不是空。
例子,创建表后显示以下结果:
mysql> select * from shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
查询特定列中的最大值
SELECT MAX(article) AS article FROM shop;
+---------+
| article |
+---------+
| 4 |
+---------+
简单的子查询:
SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop);
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0004 | D | 19.95 |
+---------+--------+-------+
也可以通过以下方式来达到同样的效果
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.price < s2.price
WHERE s2.article IS NULL;
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;
每个分组里的最大值
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article;
+---------+-------+
| article | price |
+---------+-------+
| 0001 | 3.99 |
| 0002 | 10.99 |
| 0003 | 1.69 |
| 0004 | 19.95 |
+---------+-------+