当前位置: 代码迷 >> 综合 >> MySQL学习笔记--day4
  详细解决方案

MySQL学习笔记--day4

热度:46   发布时间:2023-11-26 13:39:46.0

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)
  相关解决方案