相关文章推荐
刀枪不入的红薯  ·  mysql ...·  1 周前    · 
火星上的火腿肠  ·  MySQL8.0.19 ...·  1 周前    · 
空虚的枕头  ·  java: ...·  2 月前    · 
咆哮的馒头  ·  IBM Documentation·  4 月前    · 
mysql union使用+limit使用+数据库定义语句DDL+数据库操作语句DML-初学教程 4

mysql union使用+limit使用+数据库定义语句DDL+数据库操作语句DML-初学教程 4

第一部分: zhuanlan.zhihu.com/p/63

第二部分: https://zhuanlan.zhihu.com/p/64

第三部分: zhuanlan.zhihu.com/p/67

Day4

目录
11.union合并数据集
12.limit使用/mysql分页条数查询【limit 起始下标m,长度n】
13.数据库定义语句DDL(insert table,drop,alter)【增删改表的结构】
mysql常用数据类型
14.数据库操作语句DML(insert into.. values, delete,update)

十一,union 合并结果数据集

使用条件:合并的字段个数要相同。
作用:不是同一个字段揉捏成同一个字段

例:查询job包含 MANAGER 和 SALESMAN 的员工信息。
> select * from emp where job='manager' union select * from emp where job='salesman';

Ps:字段个数相同,但字段类型不一致也可合并(Oracle不可以)

> select job,sal from emp where job='salesman' union select ename,job from emp where job='manager';

十二,limit的使用/mysql分页条数查询

1,limit的使用

limit: 用来获取一张表中的某部分数据。limit只在mysql存在,不通用于其他数据库管理系统。limit出现在mysql语句的最后位置,不是order by。

用法:limit 起始下标m,长度n

其中 m:记录开始的index,默认从 0 开始,表示第一条记录;

n :指从第 m+1 条开始,取 n 条;

案例1:找出员工中前5条纪录
>select * from emp limit 5;

案例2:找出公司中工资排名在前5名的员工
思路:按照工资降序排列取前5
> select * from emp order by sal desc limit 5;

案例3:找出工资排名在【3-9】名的员工
> select * from emp limit 2,7;

2.MySQL中通用的分页查询SQL语句

-----------------------------------------------

十三,DDL,数据库定义语句 create,drop,alter (增删改表的结构)

13.1 创建表结构的语句: create

13.1.1语法格式:

PS:在现实中,系统构架师需要对表结构一开始就要定义好,尤其是字段的个数+类型,若后期需要变动字段个数/类型等,之前写的sql语句也要变动,会相当麻烦!

表格中的字段属性包括:字段名称,字段数据类型,字段长度,字段约束。

13.2.2mysql常用数据类型

VARCHAR与CHAR对比

– 都是字符串
– VARCHAR比较智能,可以根据实际的数据长度分配空间,比较节省空间;但在分配的时候需要相关判断,效率低。
– CHAR不需要动态分配空间,所以执行效率高,但是可能会导致空间浪费
– 若字段中的数据不具备伸缩性,建议采用CHAR类型存储
– 若字段中的数据具备很强的伸缩性,建议采用VARCHAR类型存储

关于SQL脚本:

--该文件是一个普通的文本文件,后缀名.sql,被称为sql脚本
--在sql脚本中有大量的sql语句,想批量的执行SQL语句,可以将这些sql语句写入sql脚本文件中,直接使用source执行这个脚本,即可批量执行脚本语句(source 拖入文件)。
--若项目中期就职,可能数据库表,以及表中的纪录都已经准备好了,Team leader会直接给程序猿一个sql脚本,直接执行这个脚本将底层数据库中的数据完成初始化,就可以开发了。【64MB可以使用sublime text 工具打开】

13.1.3案例说明

案例1 :创捷学生信息表结构,字段设置如下:
学号:no INT(10) ,
姓名:name varchar(32),
性别:char(1),
出生日期:date,
email:varchar(128)

建表语句:
> create table t_student(no int(10),name varchar(32),sex char(1),birth date,email varchar(128))

Ps:·▲表格名称最好以 t_ 或 tbl_ 开始,增强可读性
▲varchar的长度最好为2的倍数,有利于中文的存储。

案例2: 创建表格时给 字段设置默认值 ,default,将性别默认为男性。
建表语句:

案例3,表复制

定义:将查询结果当作一张表创建
语法结构:
CREATE TABLE tableName1 AS SELECT column1,column2,… FROM tableName2;

a.完全复制某张表,如完全复制emp表
> create table emp1 as select * from emp;

b.复制某张表的部分信息
如:新建一个表emp2,复制emp表中empno,ename,sal三个字段,建表语句如下
> create table emp2 as select empno,ename,sal from emp;

案例4,将查询结果插入到某张表中。

语法结构:
INSERT INTO tableName1 SELECT columnName1,columnName2,… FROM tableName2;
注意:当将查询结果新创建一个表时,是有关键字as;当将查询结果插入到记录中,此时没有关键字as。

从emp2表中查询出员工工资为3000的,同时将查询结果插入到emp2表中。
> insert into emp2 select * from emp2 where sal=3000;

13.2删除表的语句:drop

>drop table t_student;(如果数据库中没有该表格,则会报错);
>drop table if exists t_student;(最好采用这种方式删除表格,但这是MySQL特色其它数据库无法使用)

13.3修改表结构的语句:alter(增删改表结构 ADD-MODIFY-DROP)

13.3.1语法结构:
 新增:ALTER TABLE table_name ADD columnName 字段类型(长度);
 修改:ALTER TABLE table_name MODIFY columnName 字段类型(长度);
 删除:ALTER TABLE table_name DROP columnName;

ps:在修改表结构时,modify后面直接跟需改后的内容。

13.3.2案例
将之前的t_student表删除,重新建一个只有no,name两个字段的表结构。后面通过修改表结构新增修改删除一个字段的例子

1,给 t_student 表添加一个电话字段【增加】
mysql> alter table t_student add tel varchar(11);

2,将字段 tel 长度扩展到20个长度【修改】
mysql> alter table t_student modify tel varchar(20);

3,将 t_student 表中的 tel 字段删除
mysql> alter table t_student drop tel;

十四,DML语句(数据库操作语句)insert,delete,update(增删改表中的数据)

14.1 添加表中数据:insert

14.1.1 语法格式:

ps:如果向表中全部字段插入数据,可以省略字段列表.当省略字段表示为valuse后面的值的个数,与字段个数要一致。若字段和值的个数不匹配,系统就会报错。所以,不推荐使用,若使用省略字段列表,一旦表结构发生变化(增加或删除某字段),前面写的数据就会报错。

获取当前时间now()函数:

当插入的值为中文时:以下解决方案是在dos窗口中使用mysql!!!若是在mysql客户端就不会出现中文乱码问题。

1,查看创建表时,底层使用的数字编码是什么?DOS窗口字符编码为GBK,数据库字符编码为UTF-8。
>show create table t_student;

2,修改查询结果的显示编码方式:dos窗口进入mysql时设置
>set character_set_results='gbk';【只对当前会话有效果】

3,查看mysql的相关字符编码方式:
>show variables like '%char%';

14.1.2案例说明


案例1:向t_student表格中插入数据

> insert into t_student(no,name,sex,birth,email) values(1,'zhangsan','m','1990-1-1','zhangsan@163.com');

>insert into t_student(no,name,sex,birth,email) values(2,'lisi','f','1990-4-6','lisi@163.com');

默认情况下:当一张表被创建之后,没有指定约束的话 ,可以为NULL,并且没有指定默认值的话,默认值为NULL,若插入数据的时候没有给该字段指定任何数据,默认插入NULL。

如:新增一条纪录,只有姓名和email

若想要重新把王五的信息补全,应如何操作?即需要用update语句。

案例2:如何插入日期?

第一种方式:插入的日期格式和显示的日期格式一致。
> insert into t_student(no,name,birth) values(2,'lisi','1990-1-1');

第二种方式:采用str_to_date。
> insert into t_student(no,name,birth) values(1,'zhangsan',str_to_date('04-06-1995','%m-%d-%Y'));

第三种方式:添加系统日期(now())
> insert into t_student(no,name,birth) values(3,'pula',now());

14.2,修改表中的数据:update

14.2.1 语法格式

UPDATE tableName SET 字段名 = 字段值,字段名 = 字段值 WHERE 条件;

注意:update如果没有条件限制,将把整张表的数据全部更新;即set后面为修改后的内容,where为修改前的内容(条件)。

14.2.2 案例说明

案例1:t_student表中,将no=3的记录 name修改为zhangsan,birth改为2000-01-01
>update t_student set name='zhangsan',birth='2000-01-01' where no=3;

案例2:将t_student表中的name都改为lisi(即不要限定条件即可)
> update t_student set name='lisi';

案例3,在emp_back(emp的复制表)中,将职工名字中含有O的改为‘zhangsan’
> update emp_back set ename='zhangsan' where ename like '%o%';

案例4,将emp_back 表中所有工作岗位是manager和salesman的员工工资上调10%
> update emp_back set sal=sal*1.1 where job in('salesman','manager');

14.3 修改表中的数据:delete

14.3.1 语法结构

DELETE FROM tableName WHERE 条件限制;

注意:若没有条件限制,会将表中所有记录全部删除;

14.3.2 案例说明

1.将t_student表中,学号为3的学生删除
> delete from t_student where no=3;

2.把t_student全部删除
> delete from t_student ;

3.将emp_back 表中的job为manager数据删掉
> delete from emp_back where job='manager';

本节内容主要为:
11.union合并数据集
12.limit使用/mysql分页条数查询【limit 起始下标m,长度n】
13.数据库定义语句DDL(insert table,drop,alter)【增删改表的结构】
mysql常用数据类型
14.数据库操作语句DML(insert into.. values, delete,update)


本小节正式结束,后面内容尽情期待~

编辑于 2020-02-17 23:41