MySQL基础语法1
标签(空格分隔): 数据库
##数据表的增、删、改
对数据表进行操作前,需要制定数据库
mysql> show tables;
ERROR 1046 (3D000): No database selected
mysql> use firstdatabase;
Database changed
如果没有制定数据库,就会出现如下错误:
ERROR 1046 (3D000): No database selected
增
insert into commoditytype (ct_id,ct_name) values (2,'文具'),(3,'书籍');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
如果插入一条已存在的记录,就会出现如下错误
mysql> insert into commoditytype (ct_id,ct_name) values (2,'文具');
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'
删
删除一条记录,必须使用删除条件
mysql> delete from commoditytype where ct_id=3;
Query OK, 1 row affected (0.02 sec)
如果不加删除条件就会将整张表删除
mysql> delete from commoditytype;
Query OK, 2 rows affected (0.02 sec)
改
mysql> update commoditytype set ct_name='暑期' where ct_id=3;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
如果不加条件,就会将整张表的记录改掉。
数据库查找
select和关键字
mysql> select helloworld;
ERROR 1054 (42S22): Unknown column 'helloworld' in 'field list'
mysql> select 'helloworld';
+------------+
| helloworld |
+------------+
| helloworld |
+------------+
1 row in set (0.00 sec)
mysql> select 'helloworld' as `say hi`;
+------------+
| say hi |
+------------+
| helloworld |
+------------+
1 row in set (0.00 sec)
mysql中 使用’'来标识值 使用``来标识字段或者表名称。
除了使用以下代码来显示整张表,
mysql> select * from commodity;
还可以在select关键字后面指定字段名称(多个字段名称用逗号隔开),从而显示部分数据表。
mysql> select c_num,c_name,c_type,c_inprice,c_num from commodity;
四则运算法则
mysql> select c_name as 商品名称,c_outprice
as 商品售价,c_inprice as 商品进价 , c_outprice-`c_inprice` as 商品利润
-> from commodity;
当null参与运算的时候,结果也为null
distinct关键字
mysql> select distinct c_type from commodity;
+--------+
| c_type |
+--------+
| 1 |
| 2 |
| 3 |
+--------+
3 rows in set (0.01 sec)
where关键字
mysql> select * from commodity where c_type=1;
mysql> select c_name,c_inprice
-> from commodity
-> where c_inprice>=10 and c_inprice<=100;
提供了between and 来查询某个数值区间,且包括那两个点
mysql> select c_name,c_inprice
-> from commodity
-> where (c_inprice between 10 and 100) and c_type=3;
not between and 来这个区间范围外的查询,且不包括那两个点
mysql> select c_name,c_inprice
-> from commodity
-> where c_inprice not between 10 and 100;
is null 为空判断 is not null 非空判断
mysql> select c_name,c_type
-> from commodity
-> where c_outprice is null;
mysql> select c_name,c_outprice,c_inprice,c_outprice-c_inprice
-> from commodity
-> where c_outprice is not null;
in 关键字 用来检索 特定的某些值
not in 关键字 用来检索 这些特定值以外的值
mysql> select c_name,c_inprice
-> from commodity
-> where c_inprice in (10,20,30,40,50);
mysql> select c_name,c_inprice from commodity
-> where c_inprice not in (10,20,30,40,50);
使用like关键字 查询商品名称中有 玩具 的商品有哪些
like ‘%’ 效果等同于 查询所有
mysql> select c_name from commodity
-> where c_name like '%玩具%';
order by 关键字
将数据表根据某个字段按照某种顺序排列输出,后面跟asc(升序,可以不写默认)或desc(逆序)
mysql> select c_name,c_inprice from commodity
-> order by c_inprice ;
如果where关键字存在,该关键字必须放在where后,且输出的结果只针对查询后得到的部分数据表。
limit关键字
一般与order by 关键字连在一起用,只输出排序后数据表的前几行
mysql> select c_name,c_inprice
-> from commodity
-> order by c_inprice desc
-> limit 5;
常用的使用场景是翻页效果。但是,如果按上述方式来使用而有一个人想一直翻到最后,那么页面的加载会很慢。所以和where关键字和主键一起使用。
聚合函数
聚合函数 | 含义 |
---|---|
count() | 统计记录数 |
avg() | 求平均值 |
sun() | 求和 |
max() | 求最大值 |
min() | 求最小值 |
count()函数可以用两种方式来实现,count(*)使用方式,实现对表中记录进行统计,不管是否包含NULL还是NOT NULL。
mysql> select count(*) from commodity;
+----------+
| count(*) |
+----------+
| 59 |
+----------+
1 row in set (0.03 sec)
count(field)使用方法对指定字段进行统计,将忽略NULL值!
mysql> #count(field)
mysql> select count(c_outprice) from commodity;
+-------------------+
| count(c_outprice) |
+-------------------+
| 56 |
+-------------------+
1 row in set (0.01 sec)
还有,如果表中无数据,count()函数返回的是0,其它函数返回 null;
mysql> select avg(c_inprice) from commodity where c_type=4;
+----------------+
| avg(c_inprice) |
+----------------+
| NULL |
+----------------+
1 row in set (0.00 sec)
mysql> select count(c_inprice) from commodity where c_type=4;
+------------------+
| count(c_inprice) |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
根据上述的特性,经常用于登录验证。
group by 关键字
mysql> select * from commodity group by c_type;
+------+-----------------+----------+--------+-----------+------------+-------+
| c_id | c_name | c_madein | c_type | c_inprice | c_outprice | c_num |
+------+-----------------+----------+--------+-----------+------------+-------+
| 1 | 变形金刚-擎天柱 | 中国 | 1 | 20 | 50 | 60 |
| 23 | 中华铅笔HB | 中国 | 2 | 1 | 2 | 100 |
| 41 | java入门到精通 | 中国 | 3 | 30 | 66 | 15 |
+------+-----------------+----------+--------+-----------+------------+-------+
3 rows in set (0.00 sec)
一般和聚合函数使用。
mysql> select sum(c_inprice),avg(c_inprice),max(c_outprice)
-> from commodity
-> group by c_type;
+----------------+----------------+-----------------+
| sum(c_inprice) | avg(c_inprice) | max(c_outprice) |
+----------------+----------------+-----------------+
| 2448 | 116.5714 | 3000 |
| 600 | 33.3333 | 460 |
| 1053 | 52.6500 | 400 |
+----------------+----------------+-----------------+
3 rows in set (0.02 sec)
having关键字
使用where关键字不能将使用聚合函数后的数据表进行筛选并显示,where关键字只能对源数据表起作用。
mysql> #每种商品 平均进价 》100
mysql> select c_type , avg(c_inprice)
-> from commodity
-> group by c_type
-> having avg(c_inprice)>100;
+--------+----------------+
| c_type | avg(c_inprice) |
+--------+----------------+
| 1 | 116.5714 |
+--------+----------------+
1 row in set (0.00 sec)
注意:
mysql> select c_type
-> from commodity
-> group by c_type
-> having avg(c_inprice)>100;
+--------+
| c_type |
+--------+
| 1 |
+--------+
1 row in set (0.00 sec)
这个having中不需要出现在结果表中 是从5.7版本才开始支持的.