MySQL基础语法1

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版本才开始支持的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值