我们使用在进行数据库开发时,无非就是对数据进行增删改查的操作,学会了这个,就等于把数据库开发学会了,这是对普通的程序员而言
Insert语句 (增加数据)
Update语句 (更新数据)
Delete语句 (删除数据)
Select语句 (查找数据)
那么首先学习向表中增加数据,因为只有表中有数据了,才有更新,删除,查找数据等操作,不然这些操作没有什么意义,
使用 INSERT 语句向表中插入数据
语法:
INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
在插入数据时,请注意如下几项:
1:插入的数据应与字段的数据类型相同。
2:数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
3:在values中列出的数据位置必须与被加入的列的排列位置相对应。
4:字符和日期型数据应包含在单引号中。
5:插入空值,不指定或insert into table value(null)
现在看下昨天我们创建user表的结构如图:
现在有一个user表,向表中插入一条数据
insert into user(id,username,birthday,entry_date,job,salary,resume,iamge)
values(1,'liudehua','1988-11-11','1988-09-09','android',10000,'liudehua.doc',null);
在iamge这个列中我们给他值设置为null, 上面是一种写法,当然也可以不写,他也是为null,我们再插入一条数据,不写iamge这列:仔细看insert 语句:
insert into user(id,username,birthday,entry_date,job,salary,resume)
values(2,'liudehua','1988-11-11','1988-09-09','android',10000,'liudehua.doc');
现在我们查看下数据库中的数据 一共由于二条如图:
我们从表中就可以看出iamge这列的值为null,这就是注意事项中最后一条,向表中插入数据为null时,有二种做法,
插入数据,还有一种写法是这样的,比如我们向user表中插入一条数据,看下和之前插入语句有什么不同
insert into user values(3,'xxxx','1988-11-11','1988-09-09','java',10000,'xxxxx.doc',null);
把之前列名都省略了,直接按照表中列的顺序插入数据 这种做法最好不好这么搞,因为在公司做开发,不是你一个人做,这样可读性不好
插入数据的细节:
表中的数据类型很多,有int varchar text ...等一系列的,比如我们向user表中插入一个id,username
insert into user(id,username) values('5','zhoujielun');
id在表中明明是int类型,但是我们却传入了一个字符串类型,这就是mysql在插入数据的时候,会检查id的数据类型,然后自动转换成int类型
我们在向表中插入了数据,但有时需要对表中的数据进行修改,也就是更新数据库中的数据
更新数据库中的数据就要用到update语句了,使用 update语句修改表中数据
语法:
UPDATE tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
说明:
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行
将所有员工薪水修改为5000元。
update user set salary=5000;
将id=2的员工薪水修改为11000;
update user set salary=11000 where id=2;
我们来看看表中的数据、
这是带条件的修改表中的某一条数据 上面的条件就是id=2 也就是修改这id=2这条记录 这就是附带条件的
将姓名为’zhoujielun’的员工薪水修改为3000元。
这和上面的将id=2的修改一样
update user set salary=3000 where username='zhoujielun';
将姓名为’zhoujielun’的员工薪水修改为4000元,job改为ccc。
update user set salary=4000,job='ccc' where username='zhoujielun';
将zhoujielun的薪水在原有基础上增加1000元
update user set salary=salary+1000 where username='zhoujielun';
我们在向表中插入数据的同时可能要对表中的数据进行删除,删除表中的数据用delete语句
使用 delete语句删除表中数据
语法:
delete from tbl_name [WHERE where_definition]
说明:
1:如果不使用where子句,将删除表中所有数据。:
2:Delete语句不能删除某一列的值(可使用update)
3:使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
4:同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
5:删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同
TRUNCATE TABLE 是先删除整张表,包括表中的数据,然后再建一张没有数据的表效率比delete语句删除表速度快
delete 是一条条删除表中的数据
一般做整表删除用TRUNCATE TABLE
删除表中的某一行用delete
那么我们现在通过几个练习 熟悉delete语句
删除表中名称为’zhoujielun’的记录。
delete from user where username='zhoujielun';
删除表中所有记录。
delete from user;
使用truncate删除表中记录
在对数据库进行操作的时 查询时用的最对的 在sql中查询是用select
基本select语句
SELECT [DISTINCT] *|{column1, column2. column3..} FROMtable;
说明:
1:Select 指定查询哪些列的数据。
2:column指定列名。
3:*号代表查询所有列。
4:From指定查询哪张表。
5:DISTINCT可选,指显示结果时,是否剔除重复数据
刚才我们把user表中的数据全删了 现在重新创建一张表来练习查询语句
create table student(
id int,
name varchar(20),
chinese float,
english float,
math float
);
insert into student(id,name,chinese,english,math) values(1,'zhangxiaoming',89,78,90);
insert into student(id,name,chinese,english,math) values(2,'lijin',67,98,56);
insert into student(id,name,chinese,english,math) values(3,'wangwu',87,78,77);
insert into student(id,name,chinese,english,math) values(4,'liyi',88,98,90);
insert into student(id,name,chinese,english,math) values(5,'lilaicai',82,84,67);
insert into student(id,name,chinese,english,math) values(6,'zhangjinbao',55,85,45);
insert into student(id,name,chinese,english,math) values(7,'huangrong',75,65,30);
现在往student表中插入了几条数据,我们通过select * from student;语句查看表中的数据
练习:
查询表中所有学生的信息。
select * from student;
查询姓名为wangwu学生的成绩
select * from student where name='wangwu';
查看所有学生的数学成绩
select math from student;
查询表中所有学生的姓名和对应的英语成绩。
select name,english from student;(这是查询指定的列)
过滤表中重复英语成绩
select distinct english from student;
select语句还可以使用表达式对查询的列进行运算
语法:
SELECT *|{column1|expression, column2|expression,..} FROMtable;
在select语句中可使用as语句
SELECT column as 别名 from 表名;
练习:
在所有学生英语分数上加10分特长分。
select name,english+10 from student;
统计每个学生的总分。
select name,(english+math+chinese) from student;
使用别名表示学生分数
我们在查询统计各个学生的总分是这样的 见图
但是这种预览方式可能和我们的思维不一样 我们喜欢看到的是 比如 周三:总分 这样子
sql语句也给我们提供了
select name as 姓名,(english+math+chinese) as 总分 from student;
见图:
这样看起来 更舒服 也更符合我们的思维方式 其实就是给name 起个别名 就好像一个人的外号一样
还有一种写法是这样的 sql语法也支持
select name 姓名,(english+math+chinese) 总分 from student; (把as语句省略了)
我们在查询数据时,很多时候都是带着条件的 而不是查询表中所有的数据
sql中可以使用where子句,进行过滤查询
之前我们写过带条件的查询语句 在这里就不多讲了
可能我们要查询所有姓 周学生的成绩 这就涉及到模糊查询了
在where子句中经常使用的运算符
注意:
Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’;
我们通过练习来熟悉一下这方面的sql语句怎么写
查询英语分数在 80-90之间的同学。
select name from student where english>=80 and english<=90;
当然还有一种写法:
select name from student where english between 80 and 90;
查询数学分数为89,90,91的同学。
select name from student where math in(80,90,96);
查询所有姓李的学生成绩。
select * from student where name like 'li%';
查询数学分>80,语文分>80的同学
select name from student where math>=80 and chinese>=80;
比如根据客户需求 我们需要对查询的语句进行排序 在sql语句中使用order by 子句排序查询结果
语法:
SELECT column1, column2. column3.. FROM table; order by column asc|desc;
说明:
Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序、Desc 降序
ORDER BY 子句应位于SELECT语句的结尾。
练习:
对数学成绩排序后输出。
select * from student order by math desc;
对总分排序后输出,然后再按从高到低的顺序输出
select * from student order by (chinese+math+english) desc;
查询所有姓李的学生成绩
select * from student where name like 'li%' order by (chinese+math+english) desc;