0065 使用SQL语言查询和增删改MySQL数据库表数据
上节课介绍了关系数据库的基本概念以及如何通过客户端软件访问数据库。
这节课来介绍通过SQL语句来查询和更新数据。
什么是SQL语言
SQL是结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
常用的SQL语句如下:
创建表、删除表、查询语句、插入记录、更新记录、删除记录。
下面分别介绍这几种SQL语句的语法和例子。
SQL语言是大小写不敏感的。
注意SQL语句的数值数据类型不同,字符串需要加引号,数值型不需要加引号。
创建表
上节课通过数据库客户端软件可以在图形化界面中创建了一个表,它背后的实质还是生成一个SQL语句提交到数据库执行。
也可以直接编写好一个SQL语句提交执行来创建一个表,无需通过图形化界面的方式。
语法:
CREATE TABLE <表名>(<列名> <数据类型>[列级完整性约束条件]
[,<列名> <数据类型>[列级完整性约束条件]]…);
例子:
创建学生信息表:
create table studentscore (id int(11), name varchar(30),sex varchar(10),subject varchar(30),score int(11));
创建新闻信息表:
create table news (id int(11),title varchar(100),content varchar(300));
创建新闻信息表带主键:
create table news(id int(11),title varchar(100),content varchar(300),primary key (id));
实验:
打开数据库客户端软件Navicat for MySQL:
image双击数据库连接“localdb”,双击数据库“student”:
image可以看到有一个表“studentscore”,来执行一句SQL创建一个表news。
点击工具栏按钮图标“查询”:
image再点击“查询”按钮下方的按钮“创建查询(N)”:
4-11-4.jpg弹出一个“创建查询”窗口,光标停留在“查询编辑器”Tab窗口中,将创建SQL语句复制粘贴到这个窗口中:
image点击工具栏按钮“运行”:
image可以看到Tab窗口切换到了“信息”窗口,显示了SQL语句运行的结果,花费的时间是0.016ms,说明SQL语句正确,执行完成了。
关闭“创建查询”窗口,回到主窗口,点击左侧菜单“表”,此时发现右侧并没有出现新的表news。
在右侧空白窗口中点击鼠标右键,出现右键菜单:
image点击菜单“刷新”:
image可以看到新出现了一个表“news”,表明刚才的SQL语句运行成功了,通过SQL语句创建了一个表。
SQL语句调试
有时候编写的SQL语句不一定正确,那么可以通过数据库客户端软件来尝试执行这句SQL,发现错误或者提示之后进行修改,直到SQL语句编写正确。
来实验一下:
打开“创建查询”窗口,光标停留在“查询编辑器”Tab窗口中,将下面这句SQL语句复制粘贴到这个窗口中:
create table studentscore (id int(11), name varchar(30),sex varchar(10),subject varchar(30),score int(11));
image点击“执行”,由于表studentscore已经存在,创建同名的表会出错:
4-11-10.jpg可以看到提示表已经存在,将Tab窗口切换到“查询编辑器”Tab窗口,编辑SQL语句,修改表名为studentscore2:
image再此“运行”:
4-11-12.jpg可以看到运行成功了,去“刷新”:
image可以看到新的表studentscore2创建好了。
删除表
将刚才创建的studentscore2这个表删除,可以使用删除表SQL语句执行。
语法:
DROP TABLE <表名>;
例子:
drop table studentscore2;
实验:
打开“创建查询”窗口,光标停留在“查询编辑器”Tab窗口中,将下面这句SQL语句复制粘贴到这个窗口中:
4-11-14.jpg点击“运行”:
4-11-15.jpg然后去表查看“刷新”:
image可以看到表被删除了。
查询语句
要从表中查询指定条件的数据记录,可以使用SQL查询语句。
语法:
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]…
FROM <表名或视图名>[,<表名或视图名>]…
[WHERE <条件表达式>]
[GROUP BY <列名> [HAVING <条件表达式>]]
[ORDER BY <列名> [ASC|DESC]…]
SQL查询语句的顺序:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。SELECT、FROM是必须的,HAVING子句只能与GROUP BY搭配使用。
这里只介绍最简单的WHERE语法,其它的语法请大家自己去网上搜索相关知识自学。
例子:
检索出表studentscore的所有记录:
select * from studentscore;
检索出表studentscore的所有记录的字段name:
select name from studentscore;
检索出表studentscore的所有记录的字段name,sex,subject,score:
select name,sex,subject,score from studentscore;
检索出表studentscore的记录,条件是姓名为乔峰的:
select * from studentscore where name='乔峰';
检索出表studentscore的记录,条件是姓名里面包含“张”字的:
select * from studentscore where name like '%张%';
检索出表studentscore的记录,条件是性别等于“男”的:
select * from studentscore where sex='男';
检索出表studentscore的记录,条件是分数范围75-90:
select * from studentscore where score>=75 and score<=90;
检索出表studentscore的记录,条件是科目等于“语文”或“数学”或“英语”的:
select * from studentscore where subject in ('语文','数学','英语');
检索出表studentscore的记录,条件是姓名里面包含“张”字,并且性别等于“男”的:
select * from studentscore where name='乔峰' and sex='男';
条件表达式类似于php的条件表达式,当然一些具体细节规定不一样。
WHERE条件表达式语法:
条件表达式一 [ and/or 条件表达式二 ] ,还可以使用括号。
等于:字段=数据
字符串模糊等于:字段 like %数据%
其它%是通配符,相当于任意字符串。
大于等于:字段>=数值
其它数值比较条件判断
等于某组值的一个:字段 in (值1,值2......)
实验:
双击表studentscore,可以看到已经存在一条记录:
image打开“创建查询”窗口,光标停留在“查询编辑器”Tab窗口中,将下面这句SQL语句复制粘贴到这个窗口中:
select * from studentscore where name='乔峰';
4-11-18.jpg点击“运行”:
image可以看到运行结果出现在“结果1”Tab窗口,查询出来了一条记录。
切换Tab窗口到“查询编辑器”,修改SQL语句如下:
select * from studentscore where name like '%张%';
4-11-20.jpg点击“运行”:
image可以看到查询结果没有找到符合条件的记录。
切换最上方的窗口,回到表studentscore记录查看窗口,然后点击向下方向键:
4-11-22.jpg然后手工插入一条记录,姓名为张三丰:
image然后,点击最下方的工具小按钮,提交,将数据保存进入数据库。
4-11-24.jpg确保看到右下角的状态显示“记录2/2”,这样确保数据提交到数据库了。
然后点击最上方的窗口切换到“查询编辑器”窗口,重新运行下列SQL语句:
select * from studentscore where name like '%张%';
image点击“运行”:
4-11-26.jpg可以看到查询结果找到了符合条件的1条记录。
虽然表里面总共2条记录,但是通过where条件匹配,找到了1条记录,这就是查询语句的作用。
大家可以自己手工增加更多的记录数据,然后实验各种各样的查询SQL语句进行练习。
插入记录
语法:
INSERT INTO <表名> [(字段名[,字段名]…)] VALUES (常量[,常量]…);
例子:
insert into studentscore (id,name,sex,subject,score) values (3,'段誉','男','英语',73);
或者
insert into studentscore (id,name,sex,subject,score) values (4,'王语嫣','女','音乐',68);
实验:
打开“创建查询”窗口,光标停留在“查询编辑器”Tab窗口中,将下面这句SQL语句复制粘贴到这个窗口中:
insert into studentscore (id,name,sex,subject,score) values (3,'段誉','男','英语',73);
image点击“运行”:
image切换Tab窗口到表数据查看窗口:
4-11-29.jpg点击最下方的工具栏按钮“刷新”:
image可以看到多了一条记录出来了。
主键不能重复
主键的作用就是定义一个表里面的代表唯一性记录的字段。
例如,一个身份信息表里面的身份证号字段可以作为主键,因为身份证号是唯一性的,2条记录中不可能出现同一个身份证号。
例如,学生分数信息表里面的ID作为主键,也就是不会出现2条记录的ID的值是一样的。
如果插入记录的时候,插入的ID的值已经在表里面某条记录存在了,则插入会提示不成功。
打开“创建查询”窗口,光标停留在“查询编辑器”Tab窗口中,将下面这句SQL语句复制粘贴到这个窗口中:
insert into studentscore (id,name,sex,subject,score) values (3,'王语嫣','女','音乐',68);
image点击“运行”:
4-11-32.jpg可以看到提示插入出错了。
更新记录
如果一条记录已经存在于表当中了,则可以使用SQL语句去修改数据。
语法:
UPDATE <表名> SET 列名=值表达式[,列名=值表达式…]
[WHERE 条件表达式]
例子:
将姓名等于乔峰的所有记录的分数全部改为100:
update studentscore set score=100 where name='乔峰';
将ID等于3的记录的分数改为88:
update studentscore set score=88 where id=3;
将姓名包含张字并且科目为语文的分数改为68性别改为男:
update studentscore set score=68,sex='男' where name like '%张%' and subject='语文';
注意update语句可以针对复数条记录进行更新,需要注意where条件。
满足where条件的记录的相应字段都会更新。
实验:
打开“创建查询”窗口,光标停留在“查询编辑器”Tab窗口中,将下面这句SQL语句复制粘贴到这个窗口中:
update studentscore set score=100 where name='乔峰';
image点击“运行”:
4-11-34.jpg切换到表数据查看窗口,刷新:
image可以看到数据更新了。
删除记录
如果一条记录已经存在于表当中了,则可以使用SQL语句去删除这条记录。
语法:
DELETE FROM <表名> [WHERE 条件表达式]
例子:
将姓名等于乔峰的所有记录删除:
delete from studentscore where name='乔峰';
将ID等于3的记录删除:
delete from studentscore where id=3;
将姓名包含张字并且科目为语文的记录删除:
delete from studentscore where name like '%张%' and subject='语文';
注意update语句可以针对复数条记录进行更新,需要注意where条件。
满足where条件的记录的相应字段都会更新。
实验:
打开“创建查询”窗口,光标停留在“查询编辑器”Tab窗口中,将下面这句SQL语句复制粘贴到这个窗口中:
delete from studentscore where id=3;
4-11-36.jpg点击“运行”:
image切换到表数据查看窗口,刷新:
4-11-38.jpg可以看到记录被删除了。
更多SQL语言知识
SQL语言是一门非常复杂的语言,有各种各样的语法和规范和用法,能够实现非常复杂的功能。
作为初学者,可以暂时不要太深入的学习,掌握好以上常用的一些语法即可。
随着后续课程的深入,跟随更多的练习,可以自己去自学更多的语法规则,不断的进行实验,就能逐渐的掌握这门语言了。