mysql-纪录级别操作

2017-02-21  本文已影响31人  戏之地

增加记录

insert [into] 
tab_name (field1,filed2,.......) 
values (value1,value2,.......);
create table employ_new(
     id int primary key auto_increment,
     name varchar(20) not null unique,
     birthady data
     salary float(7,2)
)
insert into 
employee_new (id,name,birthday,salary) 
values  (1,'yuan','1990-09-09',9000);
----------------------------------------------
insert into 
employee_new values  (2,'alex','1989-08-08',3000);
//insert可以插入id相应的字段,然后id以插入的值继续增加

-- 插入多条数据,只需在后面累加就可以了
insert into employee_new values
(4,'alvin1','1993-04-20',3000),
(5,'alvin2','1995-05-12',5000);
-- 用set插入
insert into employee_new set id=12,name="value";

修改表记录

update tab_name set field1=value1,field2=value2,......[where 语句]
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。

update employee_new set salary = salary+2000 where name = "A" and gender="女"

删除表记录

delete from tab_name [where ....]
delete from employee_new  where name= "女"
# 删除表中的全部数据
delete from employee
使用truncate删除表中记录。
truncate table emp_new;
truncate指将表中的记录清空,然后生成一个具有相同字段的表

查询表记录

(1) select [distinct] *|field1,field2,......   from tab_name
-- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
-- 表明确指定要查找的列,distinct用来剔除重复行。

select distinct name,age from result_table;

(2) select 也可以使用表达式,将选出来的数据用别名进行显示

select name,JS+10,Python+10 from result_table;
select name,JS +10 as JS成绩 from result_table

(3) where 子句进行过滤查询
select id,name,JS from Exam where JS > 90
where中可以使用的比较运算符
>   <   >=   <=   <>  != 
between 80 and 100 值在80到100之间(包括)
in(89,43) 选取值只能是89或者43
like "jatrix%" %表示可以匹配多个字符 _只匹配一个字符
逻辑运算符 and or not
(4) order by 排定排序的列,排序的列可以是表中的列也可以是select 设置的别名,
主要因为优先级的问题,select的执行顺序前于order by
-- select *|field1,field2... from tab_name order by field [Asc|Desc]
默认为降序
select * from result order by JS
# 排序的时候如果有一个成绩为null
select name,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)) as 总成绩 
from result where name like "a%" order by 总成绩 desc ;
(5) group by
group by 后面跟字段或者数字索引
然后显示每个组的第一条数据 
对成绩表按名字分组后,显示每一类名字的Django的分数总和>150的
select name,sum(Django) from ExamResult group by name                                                  
having sum(Django)>150;
# group by name 后面的having限制的界定条件应用于已经分成的组
对这些组来说,是否有组内全部Django总和大于150的组
having 和 where的区别
where只能在分组前筛选,having可以用在分组后筛选
使用where的地方都可以用having进行替换
having可以有聚合函数,但是where中就不能有
(6) 聚合函数
count函数:不统计null值的记录
SUM(列名):统计一列,统计不统计null没有关系,都按0
sum(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))
as 总成绩 from ExamResult;
-- 统计一个班级JS成绩平均分
select sum(JS)/count(*) from ExamResult ;
-- 注意:sum仅对数值起作用,否则会报错。
AVG
select avg((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))                                                         
from ExamResult ;
注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!

执行顺序

Mysql在执行sql语句时的执行顺序:
from where select group by having order by
来自哪,选择组有序

select JS as JS成绩 from ExamResult where JS成绩 >70;不成功
select JS as JS成绩 from ExamResult having JS成绩 >90;成功
select JS as JS成绩 from ExamResult group by JS成绩 having JS成绩 >80;成功
select JS as JS成绩 from ExamResult order by JS成绩;成功
select * from ExamResult as 成绩 where 成绩.JS>85;成功

limit

limint 1 只显示一个
limint 2,2 跳过两条,显示两条 

使用正则表达式进行查询

select * from tb_name where emp_name REGEXP '^yu'

select * from tb_name where emp_name REGEXP 'yu$'

select * from tb_name where emp_name REGEXP 'm{2}'

上一篇下一篇

猜你喜欢

热点阅读