分类 | 描述 | 关键字 |
---|---|---|
DQL(Data Query Language)数据查询语言 (掌握) | DQL语言并不是属于MYSQL官方的分类,但是对数据库的操作最多就是查询,所以我们的程序员把查询语句的语句称作为DQL语言 | SELECT 等 |
查询不会对数据库中的数据进行修改.只是一种显示数据的方式
备用数据:
----------------运行下面的sql语句,生成相关的数据库表
# 创建商品表:
CREATE TABLE product(
pid INT,
pname VARCHAR(20),
price DOUBLE,
category_id VARCHAR(32)
);
INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(4,'JACK JONES',800,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004');
INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飘飘奶茶',1,'c005');
INSERT INTO product(pid,pname,price,category_id) VALUES(13,'果9',1,NULL);
INSERT INTO product(pid,pname,category_id) VALUES(14,'香飘飘奶茶','c005');
select * from 表名;
-- 需求:查询所有的商品.
SELECT * FROM product;
查询结果如下:
mysql> select * from product;
+------+-----------------+-------+-------------+
| pid | pname | price | category_id |
+------+-----------------+-------+-------------+
| 1 | 联想 | 5000 | c001 |
| 2 | 海尔 | 3000 | c001 |
| 3 | 雷神 | 5000 | c001 |
| 4 | JACK JONES | 800 | c002 |
| 5 | 真维斯 | 200 | c002 |
| 6 | 花花公子 | 440 | c002 |
| 7 | 劲霸 | 2000 | c002 |
| 8 | 香奈儿 | 800 | c003 |
| 9 | 相宜本草 | 200 | c003 |
| 10 | 面霸 | 5 | c003 |
| 11 | 好想你枣 | 56 | c004 |
| 12 | 香飘飘奶茶 | 1 | c005 |
| 13 | 果9 | 1 | NULL |
| 14 | 香飘飘奶茶 | NULL | c005 |
+------+-----------------+-------+-------------+
14 rows in set (0.00 sec)
mysql>
select 字段名1,字段名2... from 表名;
-- 需求:查询商品名和商品价格.
SELECT pname,price FROM product;
执行如下:
mysql> select pname,price from product;
+-----------------+-------+
| pname | price |
+-----------------+-------+
| 联想 | 5000 |
| 海尔 | 3000 |
| 雷神 | 5000 |
| JACK JONES | 800 |
| 真维斯 | 200 |
| 花花公子 | 440 |
| 劲霸 | 2000 |
| 香奈儿 | 800 |
| 相宜本草 | 200 |
| 面霸 | 5 |
| 好想你枣 | 56 |
| 香飘飘奶茶 | 1 |
| 果9 | 1 |
| 香飘飘奶茶 | NULL |
+-----------------+-------+
14 rows in set (0.00 sec)
mysql>
select 字段名1 as 别名,字段名2 别名 from 表名 as 表别名;
as关键字可以省去不写
-- 需求3.别名查询.使用的关键字是as(as可以省略的).
-- 3.1表别名:查询商品名称和价格
SELECT pro.pname,pro.price FROM product AS pro;
-- 3.2列别名:查询商品名称和价格
SELECT pname AS "商品名称",price "商品价格" FROM product;
执行如下:
-- 3.1表别名:查询商品名称和价格
mysql> SELECT pro.pname,pro.price FROM product AS pro;
+-----------------+-------+
| pname | price |
+-----------------+-------+
| 联想 | 5000 |
| 海尔 | 3000 |
| 雷神 | 5000 |
| JACK JONES | 800 |
| 真维斯 | 200 |
| 花花公子 | 440 |
| 劲霸 | 2000 |
| 香奈儿 | 800 |
| 相宜本草 | 200 |
| 面霸 | 5 |
| 好想你枣 | 56 |
| 香飘飘奶茶 | 1 |
| 果9 | 1 |
| 香飘飘奶茶 | NULL |
+-----------------+-------+
14 rows in set (0.00 sec)
-- 3.2列别名:查询商品名称和价格
mysql> SELECT pname AS "商品名称",price "商品价格" FROM product;
+-----------------+--------------+
| 商品名称 | 商品价格 |
+-----------------+--------------+
| 联想 | 5000 |
| 海尔 | 3000 |
| 雷神 | 5000 |
| JACK JONES | 800 |
| 真维斯 | 200 |
| 花花公子 | 440 |
| 劲霸 | 2000 |
| 香奈儿 | 800 |
| 相宜本草 | 200 |
| 面霸 | 5 |
| 好想你枣 | 56 |
| 香飘飘奶茶 | 1 |
| 果9 | 1 |
| 香飘飘奶茶 | NULL |
+-----------------+--------------+
14 rows in set (0.00 sec)
mysql>
select distinct 字段名 from 表名;
-- 需求:查看商品表中有那些价格.
SELECT DISTINCT price FROM product;
执行如下:
mysql> SELECT pname AS "商品名称",price "商品价格" FROM product;
+-----------------+--------------+
| 商品名称 | 商品价格 |
+-----------------+--------------+
| 联想 | 5000 | -- 可以看到有两个5000的重复商品价格
| 海尔 | 3000 |
| 雷神 | 5000 | -- 可以看到有两个5000的重复商品价格
| JACK JONES | 800 |
| 真维斯 | 200 |
| 花花公子 | 440 |
| 劲霸 | 2000 |
| 香奈儿 | 800 |
| 相宜本草 | 200 |
| 面霸 | 5 |
| 好想你枣 | 56 |
| 香飘飘奶茶 | 1 |
| 果9 | 1 |
| 香飘飘奶茶 | NULL |
+-----------------+--------------+
14 rows in set (0.00 sec)
-- 查询价格去重
mysql> SELECT DISTINCT price FROM product;
+-------+
| price |
+-------+
| 5000 |
| 3000 |
| 800 |
| 200 |
| 440 |
| 2000 |
| 5 |
| 56 |
| 1 |
| NULL |
+-------+
10 rows in set (0.00 sec)
mysql>
在上面查询 price 价格的时候,存在 NULL 的值,而 NULL 在 mysql 是不算为值的。如果想要计算,此时就需要使用 IFNULL 函数,判断当查询的值为 NULL,可以设置为 0 ,操作如下:
select 列名1 + 固定值 from 表名;
-- 需求:将所有商品的价格+10元进行显示. (查询结果可参与运算)
SELECT *,IFNULL(price,0)+10 FROM product;
执行如下:
-- 将所有商品的价格+10元进行显示. (查询结果可参与运算)
mysql> SELECT *,IFNULL(price,0)+10 FROM product;
+------+-----------------+-------+-------------+--------------------+
| pid | pname | price | category_id | IFNULL(price,0)+10 |
+------+-----------------+-------+-------------+--------------------+
| 1 | 联想 | 5000 | c001 | 5010 |
| 2 | 海尔 | 3000 | c001 | 3010 |
| 3 | 雷神 | 5000 | c001 | 5010 |
| 4 | JACK JONES | 800 | c002 | 810 |
| 5 | 真维斯 | 200 | c002 | 210 |
| 6 | 花花公子 | 440 | c002 | 450 |
| 7 | 劲霸 | 2000 | c002 | 2010 |
| 8 | 香奈儿 | 800 | c003 | 810 |
| 9 | 相宜本草 | 200 | c003 | 210 |
| 10 | 面霸 | 5 | c003 | 15 |
| 11 | 好想你枣 | 56 | c004 | 66 |
| 12 | 香飘飘奶茶 | 1 | c005 | 11 |
| 13 | 果9 | 1 | NULL | 11 |
| 14 | 香飘飘奶茶 | NULL | c005 | 10 |
+------+-----------------+-------+-------------+--------------------+
14 rows in set (0.00 sec)
mysql>