MySQL笔记整理3 - SQL语句(下) DML

五、练习

1.请描述MySQL数据库在管理数据的时候的使用的管理模型。

MySQL是采用库和表的方式管理数据的,一个MySQL服务中可以存在多个数据库,每一个数据库中可以存在多张表。表一定要存在于库里面。

2.简述表结构包含哪些内容。

针对已经存在的表student,使用命令
desc student或者show columns from student;

表结构:
Field字段(表示的是列名)
Type类型(表示的是列的数据类型)
Null 这个列是否能取空值
Key 是否为主键,在mysql中key 和index 是一样的意思,这个Key列可能会看到有如下的值:PRI(主键)、MUL(普通的b-tree索引)、UNI(唯一索引)
Default:列的默认值
Extra:其它信息

3.请说明SQL指什么。并写出SQL的常见分类,说明每一类SQL的作用及相关关键字。

SQL指的是结构化查询语句(structured query lanangue)

SQL语句的种类:

  1. DDL:数据定义语言 (表结构相关的操作,库的相关操作)
    关键字:create[创建] alter[修改] drop[删除]
    作用:定义数据的结构
  2. DML:数据操作语言(表中数据操作相关)
    关键字:insert[插入] select[查询] update[修改] delete[删除]
    作用:实现对表中的数据进行增删改查的操作(crud)
  3. DCL:数据控制语言(表中数据操作授权)
    关键字:grant[授权] revoke[取消授权]
    作用:实现表中数据访问权限的控制
  4. TCL:事务控制语言(事务相关的操作)
    关键字:commit[提交事务] rollback[回滚事务]

4.DDL是什么,DDL相关的关键字有哪些,可用于实现哪些功能,语法是怎么样的,举例说明。(相关结果截图)

数据定义语言
create[创建] alter[修改] drop[删除]
1) 创建数据库,删除数据库
2) 创建表,删除表
3) 修改表结构:
添加字段,修改字段的名字,修改字段的类型,修改字段的顺序,删除字段,
add change modify drop

5. 请总结add,modify,change的作用。

通过add change modify drop这四个关键字实现
能用modify实现的都能用change实现
一般修改表名的时候用change
其他的修改建议用modify

6. 请设计一张表,创建联合主键,并通过添加数据验证联合主键的特性。(相关结果截图)

存储有问题

设立联合主键的代码:
create table homework_q6(id int auto_increment, _name varchar(8), tel int, address varchar(25), primary key(id, _name));
desc homework_q6;

设了联合主键之后,id值一样表也能存储。
如果不设立联合主键,id值一样就表就无法存储

7.请设计一张表,创建联合唯一性,并通过添加数据验证联合唯一性的特性。(相关结果截图)

设立联合唯一的代码:
create table homework_q7(id int primary key auto_increment, _name varchar(8), tel int, address varchar(25), unique key(tel, address));
desc homework_q7;

设计tel和address联合唯一,tel即使一样也能存储

如果不设置联合唯一,tel一样就不能存储

insert into MyClass values 666;

六、DML(操作表中的数据的)

6.1 插入语句(insert)

6.1.1 插入语句

往bank表中新增一个用户
sql语法:insert into 表名 values(字段1的值,字段2的值,…);
注意:插入完整字段数据的时候,要保证数据的顺序和字段的顺序一致
字符串要用单引号或者双引号引起来
insert into bank values(4, ‘rose’, ‘678’, 1000);

往bank表中新增一个用户,不考虑用户id
sql语法:insert into 表名(字段1, 字段2, …) values(字段1的值, 字段2的值, …)
注意:当插入的新记录的数据个数跟字段个数不一样的时候,用该语法,指明值和字段的对应关系。
insert into bank(name, pwd, money) values(‘nancy’,‘890’,0);
insert into bank(money, pwd, name) values(100, ‘123’,‘jerry’);

往表中批量添加多条记录
指定记录的每个字段的数据(顺序跟表中结构一致)
insert into bank values(7,‘tjim’,‘567’,2000),(8,‘tlucy’,‘789’, 500);
指定记录部分字段的数据(顺序跟字段列表一致)
insert into bank(name, pwd, money) values(‘trose’,‘123456’,200),(‘ttom’,‘567123’,1000);

把一张表中的数据批量添加到另一张表中(表的数据的复制)
把bank表中的数据复制到bank_copy表中
创建bank_copy表,让他的结构跟bank表一致。
insert into bank_copy select * from bank;

把bank表中的数据复制到bank_copy1表中
创建bank_copy1表,让他的结构跟bank表比少了money列。
insert into bank_copy1 select id, name, pwd from bank;

把bank表中的数据复制到bank_copy2表中
创建bank_copy2表,让他的结构跟bank表比多了age列。
insert into bank_copy2(id, name, pwd, money) select * from bank;

6.1.2 更新语句(update)

6.2 更新语句(update)

修改一个字段的值
把bank表中的money字段的值都改为0
sql语法:update 表名 set 字段=新的数据;
update bank set money=0;

修改多个字段的值
把bank表中的name字段都修改为’jim’,pwd字段都修改为’123’
sql语法:update 表名 set 字段1=新的数据, 字段2=新的数据, …;
update bank set name=‘jim’, pwd=‘123’;

修改部分记录的某些字段的值
sql语法:update 表名 set 字段1=新数据, 字段2=新数据,… where 条件;
注意:一个条件可能选中多条记录,也可能只有一条记录
update bank set name=‘tom’, pwd=‘456’,money=1000 where id=7;

6.3 删除语句(delete)

6.3.1 注意:删除一条完整的记录

删除一张表的所有的记录
sql语法:delete from 表名;
delete from bank_copy2;

删除一张表中的部分记录
删除bank_copy3表中的name为’jim’的记录
sql语法:delete from 表名 where 条件;
delete from bank_copy3 where name=‘jim’;

注意:删除记录以后,自增的主键在新添加新记录的时候,不会用已经被用过的值。
但是你可以自己修改为已经用过的值。
(4) 查询语句(select)

6.4 查询语句(select)

6.4.1 实现对表的全查询

select * from stu_info;

6.4.2 指定字段查询

查询stu_info表所有学生的num name age
select num,name,age from stu_info;

6.4.3 查询部分记录(有条件查询)

查询年龄在20岁以上的所有学生的信息
select * from stu_info where age>=20;
查询年龄在20岁以下的所有学生的名字和年龄信息
select name,age from stu_info where age<20;
查询年龄在19到21之间的所有学生的信息
select * from stu_info where age>=19 and age<=21;
select * from stu_info where age between 19 and 21;
查询学生qq是5673,4562,8976的学生的名字,年龄,qq信息
select name,age,qq from stu_info where qq in(5673,4562,8976);
select name,age,qq from stu_info where qq=5673 or qq=4562 or qq=8976;

6.4.4 查询结果去重

在要去重的字段的前面加上distinct关键字即可
查看stu_info中学生的年龄构成
select distinct age from stu_info;

6.4.5 定义别名

给表达式,结果集中的列名,表名,整个结果集起别名
定义别名的时候是通过as关键字实现,as是可以省略的

6.4.5.1 给表达式定义别名

select 1+1 as sum; # 结果集中以sum作为列名
select 1+1 sum; # 结果集中以sum作为列名

6.4.5.2 给结果集中的列名定义别名

查看stu_info表中所有的学生长大一岁后的年龄,并且显示学生名字。
select name, age+1 as upage from stu_info;

6.4.5.3 给表定义别名(常见于多表查询时)

把stu_info的名字定义别名为s
查询表中的所有的学生的名字和年龄
select s.name,s.age from stu_info as s;

6.4.5.4 给某一个结果集定义别名,用于子查询中

6.4.6 排序查询(升序asc[默认值] 降序desc)

添加 order by子句,对于结果集进行排序
查询stu_info表中所有学生的姓名和年龄,按年龄进行排序(升序)
select name,age from stu_info order by age;
查询stu_info表中所有学生的姓名和年龄,按年龄进行排序(降序)
select name,age from stu_info order by age desc;
查询stu_info表中所有学生的姓名和年龄,按年龄进行排序,如果年龄相同在按照名字排序
select name,age from stu_info order by age,name;
查询stu_info表中所有学生的姓名和年龄,按年龄进行升序排,如果年龄相同在按照名字降序排
select name,age from stu_info order by age asc,name desc;

6.4.7 限制查询(分页查询)

添加limit子句。语法:limit 起始索引,记录个数
注:索引值从0开始。当起始索引为0的时候,可以省略。
查询stu_info表中的前3条记录的所有信息
select * from stu_info limit 0,3;
起始索引为0,可以省略
select * from stu_info limit 3;

6.4.8 排序和分页查询的综合应用

查询出stu_info表中年龄最大的学生的名字和年龄以及学号信息
select num,name,age from stu_info order by age desc limit 0,1;
查询出stu_info表中年龄最小的学生的名字和年龄以及学号信息
select num,name,age from stu_info order by age asc limit 0,1;

6.4.9 模糊查询

进行查询条件值不完整
通过like关键字实现模糊查询
%作为占位符,表示0到多个字符
_作为占位符,一个下划线代表一个字符
查询stu_info表中名字含有’张’的学生信息
以下的sql等同于where name = ‘张三’;
select * from stu_info where name like ‘张三’;
查询stu_info表中名字含有’张’的学生信息
以下sql表示以’张’为开头,表示:张*** 或 张
select * from stu_info where name like ‘张%’;
查询stu_info表中名字含有’张’的学生信息
以下sql表示以’张’为结尾,表示:***张 或 张
select * from stu_info where name like ‘%张’;
查询stu_info表中名字含有’张’的学生信息
以下sql表示含有’张’,表示:张 或 张 或 张
select * from stu_info where name like ‘%张%’;
查询stu_info表中名字的第二个字符是’o’的学生的信息
select * from stu_info where name like ‘_o%’;
查询stu_info表中名字的第三个字符是’m’的学生的信息
select * from stu_info where name like ‘__m%’;

6.4.10 分组查询

你可能感兴趣的:(服务端,数据库DBA,=SQL=)