union 合并查询结果集
案例
查询工作岗位是 manage 和 salesman 的员工(3种写法)
1.
select ename,job from emp where job = "manager" or job = "salesman";
2.
select ename,job from emp where job in ("manager","salesman");
3.(效率高,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻。union可以减少匹配的次数,还能完成要求)
select ename,job from emp where job = "manager"
union
select ename,job from emp where job = "salesman"
? 使用union结果集合并时,必须保证结果的列数相同
limit
概念:
limit时将查询结果集的一部分取出来,通常使用在分页查询当中。
使用:
完整用法:limit startIndex,length;
缺省用法: limit 5;从0开始取5个值
按照薪资降序,取出排列在前五名的员工?
select ename,sal
fromemp
order by sal desc
limit 5; //取前五
表的创建
创建表(DDL语句 ddl包括:create drop alter)
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);
//最后一个位置没有;//指定默认值
create table 表名(
字段名1 数据类型 default 值,
字段名2 数据类型 default 值,
字段名3 数据类型
);
//最后一个位置没有;
表名建议以 t_
或 tbl_
开始,可读性抢。
快速创建表
create table emp2 as select * form emp;
//将 查询结果 当作数据再建一个表
create table emp2 as select ename form emp where job = 'aaa';
//将查询到的东西建一个新表
关于mysql中的数据类型
有很多数据类型,我们需要掌握一些即可
- varchar (最长255)
- 可变长度的字符串
- 优点:比较智能,会根据实际的数据长度动态分配空间
- 缺点:速度慢
- char (最长255)
- 定长字符串
- 给每个数据分配相同的安排好的空间,不管实际的数据长度
- 缺点:使用不恰当会当值空间浪费
- 优点:速度快
- int (最长11)
- 数字中的整数型
- bigint
- 数字中的长整型,等同于java中的 long
- float
- 单精度浮点型数据
- doule
- 双精度浮点数据
- date
- 段日期类型
- datetime
- 长日期类型
- clob (255b < clob < 4g)
- 字符大对象
- 做多存储4G字符串(比如存储一篇文章)
- blob
- 二进制大对象
- 存放图片,声音,视频登流媒体数据
- 往blob类型数据中传入内容时,需要 IO流 的形式
模拟创建一个表
create table t_movie(no char(10),name varchar(10),num int);
Query OK, 0 rows affected (0.07 sec)
表的删除
drop table 表名; //当这张表不存在时会报错!
drop table if exists 表名;
Insert语句(DML语句)
语法格式
insert into 表名(字段名1,字段名2,字段名3) values(值1,值2,值3);
insert into 表名 values(值1,值2,值3,....); //前面的字段名省略相当于全写上了,后面的值也要全写
注意:字段名和值要一一对应。
mysql> insert into t_student(no,name,sex,age,email) values (1,'闫','男',18,'111111@qq.com');
Query OK, 1 row affected (0.02 sec)
mysql> select * from t_student-> ;
+------+--------------+------+------+-------------------+
| no | name | sex | age | email |
+------+--------------+------+------+-------------------+
| 1 | 闫 | 男 | 18 | 818@qq.com |
| 2 | 安姐姐 | 女 | 18 | 818@qq.com |
+------+--------------+------+------+-------------------+
插入多条记录
mysql> insert into t_student(no,name,sex,age,email) values
(1,'闫','男',18,'111111@qq.com'),
(2,'李','男',18,'1222111@qq.com'),
(3,'刘','男',18,'12223333111@qq.com'),
(4,'高','男',18,'111111@qq.com');
mysql> select * from t_student;
+------+--------------+------+------+--------------------+
| no | name | sex | age | email |
+------+--------------+------+------+--------------------+
| 1 | 飞 | 男 | 18 | 1472809818@qq.com |
| 2 | 安姐姐 | 女 | 18 | 818@qq.com |
| 1 | 闫 | 男 | 18 | 111111@qq.com |
| 2 | 李 | 男 | 18 | 1222111@qq.com |
| 3 | 刘 | 男 | 18 | 12223333111@qq.com |
| 4 | 高 | 男 | 18 | 111111@qq.com |
+------+--------------+------+------+--------------------+
6 rows in set (0.00 sec)
将查询结果插入表中
//用的少
insert into t_student 查询语句;
insert into t_student select * from t_student2 where no = 2;
Insert插入日期
**格式化数字:**format(数字, ‘格式’ )
mysql的日期格式:
- %Y (大写) 年
- %m 月
- %d 日
- %h 时
- %i 分
- %s 秒
时间的两个函数:
- str_to_date : 将字符串 varchar 类型转换成 date 类型
- 格式:
str_to_date('2001-2-11','%Y-%m-%d')
- 当你写时间字符串时 写成了
'%Y-%m-%d'
格式的,那么久可以省略这个函数
- 格式:
- date_format : 将date类型转换成具有一定格式的varchar类型
- 通常使用在查询时后以某个特定的日期格式进行展示
- date_format(日期类型数据 , ‘数据格式’ ) 例:
date_format(birth,'%m/%d/%Y')
- 默认不设置时,以
%Y-%m-%d
格式,自动转换为 varchar 类型
// 创建表
mysql> create table t_user( -> id int,-> name varchar(32),-> birth date-> );
Query OK, 0 rows affected (0.04 sec)//查看表结构
mysql> desc t_user;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| birth | date | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)//插入数据 (通过str_to_date转换)
mysql> insert into t_user(id,name,birth) values(1,'李子安',str_to_date('2001-02-11','%Y-%m-%d'));
Query OK, 1 row affected (0.01 sec)mysql> select * from t_user;
+------+-----------+------------+
| id | name | birth |
+------+-----------+------------+
| 1 | 安 | 2001-02-11 |
+------+-----------+------------+
1 row in set (0.00 sec)//查询数据
mysql> select name,date_format(birth,'%m/%d/%Y') as birth from t_user;
+-----------+------------+
| name | birth |
+-----------+------------+
| 李子安 | 02/11/2001 |
+-----------+------------+
1 row in set (0.00 sec)
date和datetime
- date 是短日期,只包含年-月-日信息
- 默认格式%Y-%m-%d
- datetime是长日期,包含年-月-日-时-分-秒信息
- 默认格式%Y-%m-%d %h:%i:%s
update和delete(DML)
update
语法格式:
update 表名 set 字段名1 = 值1,字段名2 = 值2,字段名3 = 值3 ... where 条件;
//注意:没有条件限制会导致所有数据全部更新
实例:
mysql> select * from t_user-> ;
+------+-----------+------------+
| id | name | birth |
+------+-----------+------------+
| 1 | 子 | 2001-02-11 |
| 2 | 闫飞 | 2002-11-09 |
+------+-----------+------------+
2 rows in set (0.00 sec)mysql> update t_user set name = '飞飞' where id = 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from t_user-> ;
+------+-----------+------------+
| id | name | birth |
+------+-----------+------------+
| 1 | 飞飞 | 2001-02-11 |
| 2 | 闫飞 | 2002-11-09 |
+------+-----------+------------+
2 rows in set (0.00 sec)
delete
语法格式:
delete from 表名 where 条件
//注意:没有条件限制会导致所有数据全部删除
mysql> delete from t_user where id = 2;
Query OK, 1 row affected (0.01 sec)mysql> select * from t_user;
+------+-----------+------------+
| id | name | birth |
+------+-----------+------------+
| 1 | 子 | 2001-02-11 |
+------+-----------+------------+
1 row in set (0.00 sec)