Mysql数据库二:表的增删改查


----
建表
CREATE TABLE emp(
id int PRIMARY key auto_increment,
name char(10) ,
birthday DATE ,
salary FLOAT (7,2)
)CHARACTER SET utf8;

----
插入
INSERT emp (name,birthday,salary) VALUES ("egon","1991-1-1",20000),
("alex","1992-1-1",2000),
("peiqi","1998-3-1",30000);

INSERT emp SET name="yuan",salary="66666";

----
修改
UPDATE emp set name = "egon1" WHERE id=1;
UPDATE emp set name="ALex",salary=55555 WHERE name="alex";
UPDATE emp set salary=salary+10000 where name = "egon1";

----
删除
DELETE FROM emp WHERE name = "Alex";
DELETE FROM emp; ---
清除表内容,但是auto_increment没有被重置就是说再插入数据id还是会自增
truncate table emp; ---id自增被删除,等价于完完全全清空表.

-------------------
查找
--------------------------

---
准备表
CREATE TABLE exam(

id INT PRIMARY KEY auto_increment,
name VARCHAR (20),
JS DOUBLE ,
Django DOUBLE ,
OpenStack DOUBLE
);

---
插入数据
INSERT INTO exam VALUES (1,"yuan",98,98,98),
(2,"xialv",35,98,67),
(3,"alex",59,59,62),
(4,"wusir",88,89,82),
(5,"alvin",88,98,67),
(6,"yuan",86,100,55);

SELECT * from exam;
SELECT name,JS from exam;
SELECT DISTINCT JS,name from exam; --
过滤表中重复数据

SELECT name,JS+10,Django+10,OpenStack+10 from exam; --各科加10分显示
SELECT name,JS+Django+OpenStack from exam;
SELECT name as
姓名,JS+Django+OpenStack as 总成绩 from exam;
SELECT name,JS+Django+OpenStack
总成绩 from exam;

---
使用where子句过滤查询
-- where字句中可以使用:

-- 比较运算符:
> < >= <= <> !=
between 80 and 100
值在1020之间
in(80,90,100) 值是102030
like 'yuan%'
/*
pattern
可以是%或者_
如果是
%则表示任意多字符,此例如唐僧,唐国强
如果是
_则表示一个字符唐_,只有唐僧符合。两个_则表示两个字符:__
*/

--
逻辑运算符
在多个条件直接可以使用逻辑运算符
and or not

SELECT
* from exam WHERE name="yuan";
SELECT id,name,JS from exam where JS >90;
SELECT name,JS+Django+OpenStack
总成绩 from exam where JS+Django+OpenStack>200;
SELECT * from exam where js BETWEEN 80 and 100;---
包括80100是闭区间
SELECT * from exam where js in (88,86);
SELECT * from exam where name like "yu%";
SELECT * from exam where js>90 and django > 90;

---order by
排序
-- Asc
升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。
SELECT * from exam ORDER BY js;
SELECT * FROM exam ORDER BY js desc; --
降序
select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0))
总成绩 from exam order by 总成绩 desc;

select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0))
总成绩 from exam where name like 'a%'
order by
总成绩 desc;


---limit
记录条数限制
SELECT * from exam limit 1;
SELECT * from exam limit 2,3;----
跳过前两条显示接下来3条记录
select * from exam limit 2,2;

---
正则表达式
SELECT * from exam where name regexp "^a";
select * from exam WHERE name REGEXP "[a-z]{5}";
SELECT * from exam WHERE name regexp "n$";
SELECT * FROM exam WHERE name regexp "m{2}";

------------------group by
分组查询---------------------
---
准备表和数据
CREATE TABLE menu(
id INT PRIMARY KEY auto_increment,
product_name VARCHAR (20),
price FLOAT(6,2),
born_date DATE,
class VARCHAR (20)
);


INSERT INTO menu (product_name,price,born_date,class) VALUES
("
苹果",20,20170612,"水果"),
("
香蕉",80,20170602,"水果"),
("
水壶",120,20170612,"电器"),
("
被罩",70,20170612,"床上用品"),
("
音响",420,20170612,"电器"),
("
床单",55,20170612,"床上用品"),
("
草莓",34,20170612,"水果");

SELECT * from menu GROUP BY 4; --
按位置字段筛选,此时按照date筛选
select class ,SUM(price) from menu group by class;
SELECT class,sum(price) from menu GROUP BY class HAVING sum(price)>150;
/*
having
where两者都可以对查询结果进行进一步的过滤,差别有:
<1>where
语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
<2>
使用where语句的地方都可以用having进行替换
<3>having
中可以用聚合函数,where中就不行。

*/
SELECT * from menu HAVING class = "
水果";
SELECT class,count(id) from menu group by class;--
先按class分组然后统计每组中的个数
result:
+----------+--------------+
| class | count(price) |
+----------+--------------+
|
床上用品 | 2 |
|
水果 | 3 |
|
电器 | 2 |
+----------+--------------+

转载于:https://www.cnblogs.com/jec1999/p/7236279.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值