数据库小结(1)

创建数据库  CREATE DATABASE [IF NOT EXISTS] 数据库名
除数据库  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不支持,可以使用子查询得到同样结果

posted @ 2018-05-20 11:03  惶者  阅读(240)  评论(0编辑  收藏  举报