数据库小结(1)
删除数据库 DROP DATABASE 数据库名
使用指定数据库 USE 数据库名
查看数据库下包含的表 SHOW TABLES
查看表结构 DESC 表名
MySQL两种存储机制:
MylSAM:MySQL早期存储机制,对事务支持不友好
InnoDB:提供事务安全的存储机制,通过建立行级锁来保证事务完整性,并以共享锁来处理Select语句
ENGINE=MylSAM:强制使用MylSAM存储机制
ENGINE=InnoDB:强制使用InnoDB存储机制
SQL语句的基础
查询语句:主要由select关键字完成,是sql中最复杂,功能最丰富的语句。
DML(数据库操作语言)语句:主要由insert、update和delete三个关键字完成
DDL(数据库定义语言)语句:主要由create、alter、drop和truncate四个关键字完成
DCL(数据库控制语言)语句:主要由grant和revoke两个关键字完成。——用于为用户授权或回收指定用户权限
事务控制语句:主要由commit、rollback和savepoint三个关键字完成
DDL语句
DDL语句主要是操作数据库对象的语,包括创建(create)、删除(drop)、修改(alter)数据库对象,最基本的数据库对象是数据表,数据表是存储数据的逻辑单元。
DML语句
DML主要操作数据表里的数据,使用DML可以完成一下三个任务:
插入新数据(insert into)、修改已有数据(update)、删除不需要的数据(delete from)
insert into语句
insert into 表名(column1、column2----)values(value1、value2----)
某些不确定的值使用null,主键也需要设置
带子查询的插入语句:
insert into table_name( select table_name from teacher);
同时插入多条语句:
insert into table_name values(value1,value2----),(value1,value2----);
========================
update语句
update table_name set column = value,column2 = value2 where ---
========================
delete from语句
delete from table_name where ----
========================
select语句
select * from table_name where ----
可以在查询语句中使用算术表达式,如:
select id*2+3 from table_name where sq*4;
可以使用concat()函数进行字符串连接运算
select concat("xxx","yyy") from table_name
使用别名
select Y y(小y就是别名) from ------
select * from table where id between 2 and 4;
select * from table where id in(1,3,4,5);
select * from table where name like "%哈哈%"
select * from table where (id >3 and id<10) or org_id <20;
order by-- 按照---排序,默认按照升序,使用desc则是倒序
select * from table where id>3 order by name DESC;
数据库函数
单行函数:
CHAR_LENGTH()找出s_name的字符长度
SELECT CHAR_LENGTH(s_name) FROM t_supplier;
sin()——三角函数,如sin(1.57)
获取当前时间:SELECT CURDATE()
MD5加密:SELECT MD5(123)
处理null的函数:
IFNULL(x1,x2)——如果x1为null,返回x2;否则返回x1
NULLIF(x1,x2)——如果x1==x2,返回null;否则返回x1
IF(x1,x2,x3)——类似三目运算,如果x1为true,不等于0,不为null,则返回x2,否则返回x3
ISNULL(x)——判断是否为null,返回true/false
流程控制函数case
SELECT table CASE case_value
WHEN when_value THEN statement_list1
ELSE statement_list
END CASE;
如果case_value = when_value,返回 statement_list1;否则返回statement_list
分组和组函数
AVG():计算平均值,有DISTINCT表示不计算重复值
SELECT AVG([DISTINCT] expr) FROM t_supplier
COUNT():计算多行的条数,DISTINCT 表示不重复计算
SELECT COUNT(DISTINCT expr) FROM--
MAX()/MIN():求多行中的最大/小值
SELECT MAX(expr)/MIN(expr)
SUM():求和
SELECT SUM([DISTINCT] expr)
group by:分组
SELECT AVG(IFNULL(x1,0)) FROM table WHERE id > 0 AND id <10 GROUP BY name
多表联查
SQL92:
将多个表写在from之后
SELECT u.*,s.* FROM t_user u,t_supplier s WHERE u.id = s.id
SQL99:
1、交叉连接(cross join)-相当于广义笛卡尔集(SELECT * FROM t_user , t_supplier)
SELECT * FROM t_user cross join t_supplier
2、自然连接(natural join)-以两个表中的同名列作为连接条件
SELECT * FROM t_user NATURAL JOIN t_supplier
3、using子句连接-显示指定两个表中的同名列作为连接条件
SELECT * FROM t_user JOIN t_supplier USING (id)
4、on子句连接-将连接条件放在on子句中指定,且每个on子句只能指定一个连接条件
SELECT * FROM t_user u JOIN t_supplier s ON s.id = u.id
5、左、右、全外连接-通过LEFT JOIN、RIGHT JOIN、FULL JOIN实现,条件用on
SELECT * FROM t_user u LEFT JOIN t_supplier s ON s.id = u.id
SELECT * FROM t_user u RIGHT JOIN t_supplier s ON s.id = u.id
SELECT * FROM t_user u FULL JOIN t_supplier s ON s.id = u.id(会出错,因为MySQL不是全外连接)
子查询
子查询可以出现在两个地方
1、出现在from语句之后当前数据表
2、出现在where条件之后作为过滤条件
注意:
※使用子查询用括号括起来
※把子查询当成数据表的时候可以为该子查询起别名
※把子查询当作过滤条件的时候,将子查询放在比较运算符右边
SELECT * FROM (SELECT id FROM t_supplier) s WHERE id>1
SELECT * FROM t_user WHERE id IN (SELECT id FROM t_supplier )
集合运算
select语句查询的结果是包含多条数据的结果集,类似数学里的集合,可以进行 交(intersect)、并(union)和差(minus)
进行集合运算必须满足如下条件:
1、两个结果集包含的数据列的数量必须相等
2、两个结果集所包含的数据列的数据类型也必须一 一对应
union运算
SELECT * FROM t_user
UNION
SELECT * FROM t_student
minus、intersect——mysql不支持,可以使用子查询得到同样结果