select后面出现子查询语句
mysql> select e.ename, e.deptno, (select d.dname from dept d where e.deptno = d.deptno) asdname from emp e;
+--------+--------+------------+
| ename | deptno | asdname |
+--------+--------+------------+
| SMITH | 20 | RESEARCH |
| ALLEN | 30 | SALES |
| WARD | 30 | SALES |
| JONES | 20 | RESEARCH |
| MARTIN | 30 | SALES |
| BLAKE | 30 | SALES |
| CLARK | 10 | ACCOUNTING |
| SCOTT | 20 | RESEARCH |
| KING | 10 | ACCOUNTING |
| TURNER | 30 | SALES |
| ADAMS | 20 | RESEARCH |
| JAMES | 30 | SALES |
| FORD | 20 | RESEARCH |
| MILLER | 10 | ACCOUNTING |
+--------+--------+------------+
14 rows in set (0.00 sec)
将符合条件的查出来,部门编号相等的情况下取部门名字,子查询只能返回一条结果,多余一条就报错
1. union 合并查询结果集
还有种写法是job in都可以表示查询员工岗位;如何使用union合并?union的效率更好一些,没连接一次新表,满足笛卡尔积.成倍的翻,但是union可以较少匹配的次数,字啊较少匹配的次数情况下,可以完成两个结果集的拼接,使用union是100加100,用表连接是100乘以100,把乘法变成了加法,匹配次数会减少,使用时候的注意事项,要求列数相同varchar是字符串,mysql可以,orcal语法严格会报错,要求合并时合并的列数一致,而且类型也要一致;
mysql> select ename, job from emp where job = "manager"
-> union
-> select ename, job from emp where job = "salesman";
+--------+----------+
| ename | job |
+--------+----------+
| JONES | MANAGER |
| BLAKE | MANAGER |
| CLARK | MANAGER |
| ALLEN | SALESMAN |
| WARD | SALESMAN |
| MARTIN | SALESMAN |
| TURNER | SALESMAN |
+--------+----------+
7 rows in set (0.00 sec)
2.or语句前后
都要将前面的字段写一下
3.limit是将查询结果集的一部分取出来,通常使用在分页查询当中
分页查询,将查询结果的一部分显示出来,一页显示10条记录,分页的作用是提高用户的体验,一次都查出来用户体检差,可以翻页看,显示limit,直接加5前五条,0,5也还是前五条,第一个参数是起始位置,limit. 包含5,9名的记录,后面的数字确定,总结:第一个数字是起始数字加一,第二个数字是到多少行减起始数字 limit (pageno - 1)* pagesize, pagesize ,总结select fromwhere groupby orderby limit f w g h s o l
4.表的创建(建表)
建表的语法格式,ddl语句crate table 表名(字段名1 数据类型,重复),
create table 表名(
1,名型
2,
3最后这个不加
);mysql有很多数据类型
python 类型:整型,浮点型,字符串; 元组,列表; 字典,集合
mysql类型:整型,浮点,字符串
varchar:可变长度字符串,会动态分布空间,动态判断,比较智能节省空间,会根据实际的长度动态分布空间,char(10)固定分配空间,定长字符串,不管实际的长度是多少分配固定的空间去存储数据,使用不恰当的时候会导致空间浪费,性别字段选择什么:char因为是固定的,因为性别是固定长度,姓名长度选择varchar,因为不确定长度,取决于存储数据的长短,int 数字中的,datetime date, clob字符大对象,最多可以存储4g的字符串,超过255个字符的都要用clob的类型存储,blob二进制大对象专门存储图片声音,视频等流媒体数据,往blog类型的兹附上插入数据的时候.例如插入一各图片视频等,要使用io流才行t_movie 电影表,专门存储电影信息的
编号 名字 描述信息 上映日期 时长 海报 类型
no(bigint) name(varchar) describtion(clob) playtime(date) time(double) image(blog) type(char)
1000 哪吒 ........ 2020-01-15 2.5 ........ "动画"
1001 山村尸体之山村老师 ...... 2022-05-05 3.1 ....... "剧情"
创建一个学生表,学号姓名,年龄,邮箱地址
create table t_student(
no int,
name varchar(32),
sex char(1),
age int(3),
email varchar(255)
);
drop table t_student;当这张表不存在的时候会报错
删除表 drop table if exists t_student,
5.insert语句 爱艾薇儿
insert into表名(字段名1, 字段名2, 字段名3, ....)values(值1, 值2, 值3)字段名和值要一一对应,什么是一一对应?数量要对应,数据类型要对应,丢几个字段,插入一条记录后如果,insert语句只要执行成功必然要多一条记录,如果没有给其他值的话默认是null,
drop table if exists t_studnet;
create table t_student(
no int,
name varchar(32),
sex char(1) default "m",
age int(3),
email varchar(255)
);insert 语句中的字段名可以省略,是错误的,前面的字段名省略的话相当于都写上,insert 插入日期,6
6.数字格式化
select ename, format(sal, "$999.999") from emp; str_to_date是将字符串转化成date,date_format是将date类型转化成varchar类型;数据库中有一条命名规范,所有的标识符都是全部小写,单词和单词之间使用下划线衔接
语法格式:str_to_date("字符串日期", "日期格式")
mysql 的日期格式%Y %m %d %h %i %s
mysql> insert into t_user(id,name,birth) values(1, "张三", str_to_date("01-02-1988", "%d-%m-%Y"));函数可以将日期类型转化成特定格式的字符串,
select id,name,date_format(birth, "%m/%d%Y") from t_user;
通常使用查询日期时使用日期格式化,birth以上的sql语句是进行了默认的日期格式化,自动将date转化成varchar类型,java中的日期格式是,str_to_date("1993-02-01","%m-%d-%Y"),date是短日期,datetime是长日期包括时分秒
mysql> insert into t_user values(1, "王二麻子", "1991-01-02", "1991-01-01 01:01:01");
Query OK, 1 row affected (0.02 sec)
mysql> select * from t_user;
+------+--------------+------------+---------------------+
| id | name | birth | creatime |
+------+--------------+------------+---------------------+
| 1 | 王二麻子 | 1991-01-02 | 1991-01-01 01:01:01 |
+------+--------------+------------+---------------------+
1 row in set (0.00 sec)
mysql> insert into t_user values(2, "二逼千坑垃圾", "1991-01-02", now());
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_user;
+------+--------------------+------------+---------------------+
| id | name | birth | creatime |
+------+--------------------+------------+---------------------+
| 1 | 王二麻子 | 1991-01-02 | 1991-01-01 01:01:01 |
| 2 | 二逼千坑垃圾 | 1991-01-02 | 2022-02-08 14:46:30 |
+------+--------------------+------------+---------------------+
7.修改update(DML) 你逃死亡
update 表名 set 字段名1 = 值1, 字段名2 = 值2, 字段名3 = 值3.....where没有条件限制会使所有数据都更新
mysql> update t_user set name = "二皮脸" , birth = "2000-01-01" where id = 2;
8.delect 打服台湾
delect from 表名 where 条件,
distinct 是去重的,出现在所有字段的最前面,连接查询.多表查询,连接查询,笔记,查询每一个员工的所在部门名称要求显示员工名和部门名,没有条件限制最终结果是,加条件再连接,满足条件再连接,要比对一次,加条件是为了避免笛卡尔积现象为了查询出有效次数组合记录,匹配的次数一次没有少,外连接,(no-1)*s, s,
9.快速创建表
mysql> create table emp2 as select * from emp;
Query OK, 14 rows affected (0.13 sec)
Records: 14 Duplicates: 0 Warnings: 0
将一个查询结果当做一张表,truncate 物理删除,表被一次截断,不支持回滚
10.truncate
删除,且无法回滚,但快速,只需要不到1秒的时间结束,效率较高,但不可回滚
11-14略
15.约束
第一:在实际开发中对表结构进行修改,修改表的结构,需求一旦确定之后,表一旦设计好之后,很少的进行表结构的修改,因为开发进行过程中.修改表的结构,成本较较高,修改表的结构对应java代码就需要大量的#修改,成本是比较高的,这个责任应该由设计人员承担.很少用到,alter
约束用到的是constraint,在创建表的时候,可以给表中的字段加上约束,来保证这个表汇总的数据完整性和有效性,包括
非空约束:not null
唯一约束:unique
主键约束:primary key(pk)
外键约束:foreign key(fk)
检查约束:chack
保证数据的完整性和有效性,唯一约束unique,约束没有添加在后面叫列级约束,约束添加在后面叫
表级约束,需要给多个字段做约束的,notnull只有列级约束,unique和not null可以联合约束,如果在mysql中如果同时被not null和unique约束自动变成主键字段,orcal不一样.主键约束,的相关术语,主键约束,主键字段,主键值,主键值是每一行记录的唯一标识,任何一张表都应该由主键,不然无效,主键是唯一标识,联合起来做主键叫符合主键,一个字段叫单一组件,两个以上叫符合主键,在实际开发中不建议使用符合主键,单一主键可以做到一个身份标识. 主键值,一般都是数字,定长的,只要是数字就可以,主键除了单一主键和复核主键外还可以是业务主键和银行卡主键,主键只要做到不重复就行不需要有意义,可能会影响到主键值,在mysql中,有一种机制可以委会一个主键值,
16.auto increase自增
17.外键约束
外键约束:一种约束,外键字段:该字段添加了外键约束,外键值外键字段当中的每一个值,业务背景.设计数据库表,来描述,删除表的顺序是先删子再删父,创建表时先创父,在创子
drop table if exists t_student;
DROP TABLE if exists t_class;
create table t_class(
classno int PRIMARY KEY,
classname varchar(255)
);
create table t_student(
no int primary key auto_increment,
name varchar(255),
cno int,
foreign key(cno) references t_class(classno)
);
insert into t_class(classno,classname) values(100,"北京市");
insert into t_class(classno,classname) values(101,"北京市");
insert into t_student(name,cno) values("a",100);
insert into t_student(name,cno) values("f",100);
insert into t_student(name,cno) values("e",100);
insert into t_student(name,cno) values("fd",100);
insert into t_student(name,cno) values("wd",101);
insert into t_student(name,cno) values("des",101);
insert into t_student(name,cno) values("ds",101);
insert into t_student(name,cno) values("dasd",101);
select * from t_student;
select * from t_class;
外键约束只能写外键有的东西,非空约束,主键约束,唯一性约束,外键约束,
约束是非常重要的,
存储引擎
什么是存储引擎?指定不同的存储引擎方式不一样,是mysql特有的术语,oracle中有,存储引擎实际上存储引擎是一个表存储组织数据的方式,存储方式不同,怎么给表添加存储引擎,指定存储引擎,展示出,可以在建表的时候指定存储引擎,建表时指定存储引擎以及编码方式.怎么查看mysql支持哪些存储引擎?
mysql> show engines \G
*************************** 1. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
9 rows in set (0.00 sec)
mysql常用的存储引擎,innodb存储引擎,memory存储引擎, 对于一张表,只要是主键或者加油unique约束的字段会自动添加索引,格式数据和索引都是固定的文件,可以转换为压缩,只读节省空间.innodb是默认的的存储引擎,同时也是一个重量级的存储引擎.表空间存储数据加索引,innodb最大的特点就是支持事物,保证数据的安全.memory存储引擎一断电就消失,查询效率是最高的一关机就消失,是放在内存中存储的
18.事务
一个事物就是一个完整的业务逻辑,从a到b转账10000完成就是业务逻辑,是一个最小的工作单元,要么同时成功,要么同时失败,这样才能保障钱是正确的,是一个最小的工作单元不能再分,存在事物的原因是一个语句完成不了,要共同协同,事物就是批量的dml语句同时成功或者同时失败,innodb存储引擎,提供一组用来记录事物性文件的日志文件,回滚事物标志着事物的技术,事务是多条,提交和回滚事物,事物对应的是transaction,在mysql中默认的事物行为,没执行一次则提交一次,回滚永远只能提交到上一次提交点,;如何将提交机制关闭读未提交,读已提交可重复读序列化,串行化脏读现象,读到了脏数据,可重复读解决了不可重复读取数据的问题,可能会出现幻影读取,没有提交就读到,提交后才读到,永远读取的都是开启事物的数据,验证隔离级别,read uncomited, serislizable,