数据库操作
1、创建数据库
CREATE DATABASE 数据库名(一般小写);
2、查看数据库
SHOW DATABASES; SHOW DATABASE 数据库名;#查看某个数据库
3、删除数据库
DROP DATABASE 数据库名;
4、切换数据库
USE 数据库名;
5、查看正在使用的数据库
SELECT DATABASE();
表结构操作
1、创建表
CREATE TABLE 表名( 列名1 数据类型 [约束], ... 列名2 数据类型 [约束] );
CREATE TABLE tname( id INT AUTO_INCREMENT PRIMARY KEY, #主键自增长AUTO_INCREMENT,只有MySQL有 create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , create_user VARCHAR(100), update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, update_user VARCHAR(100) );
2、主键约束(PRIMARY KEY):用于表示当前记录的字段,特点:非空,唯一,不具备任何含义,只用于表示当前记录
id INT PRIMARY KEY;
3、删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;4、查看表
查看数据库中的所有表:SHOW tables; 查看表结构:DESC 表名;
5、删除表
DROP TABLE 表名;
6、修改表结构格式
添加列:ALTER TABLE 表名 add 列名 数据类型 [约束]; 修改列的数据类型及约束:ALTER TABLE 表名 MODIFY 列名 数据类型 [约束]; 修改列名:ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [约束]; 删除列:ALTER TABLE 表名 DROP 列名; 修改表名:ALTER TABLE 表名 TO 新表名; 修改表的字符集:ALTER TABLE 表名 CHARACTER SET 字符集(例如:gbk);
7、插入表记录
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...); INSERT INTO 表名 VALUES(值1,值2,...);#全列值,包括主键 批量插入:INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...),(值1,值2,...);#主键为自增长类型,可省略
PS:插入空值可以不写字段,或插入null,自增长列在操作时,直接插入null值即可
8、更新表记录(用来修改指定条件的数据,将满足条件的记录指定列修改为指定值)
UPDATE 表名 SET 字段名=值,字段名=值 WHERE 条件
9、删除表中数据
DELETE FROM 表名 where 条件;#一条一条删除,不清空AUTO_INCREMENT记录数 TRUNCATE TABLE 表名;#直接将表删除并重新建表,AUTO_INCREMENT将清空记录数
SQL查询语句
1、查询指定字段信息(列)
SELECT 字段1,字段2,... FROM 表名
2、查询所有字段(列)
SELECT * FROM 表名; 正常业务中需要添加条件查询 WHERE
3、查询去掉重复记录
SELECT DISTINCT 字段 FROM 表名;
4、查询重新命名列
表别名:SELECT * FROM 表名 AS 别名; 列别名:SELECT 字段名 AS 别名 FROM 表名
5、查询数据中,可直接对列进行运算
例:SELECT zname,zmoney+100 AS 'sum' FROM zhangwu;6、条件查询
格式:SELECT 字段 FROM 表名 WHERE 表名
> < <= >= = <> | 大于,小于,小于(大于)等于,不等于 |
BETWEEN...AND... | 显示在某一区间的值(含头尾) |
IN(SET) | 显示在IN列表中的值,例:IN(100,200) |
LIKE 通配符 | 模糊查询 %匹配多个字符,例:zname LIKE 'a%'; _匹配一个字符,例:zname LIKE 'a_'; |
IS NULL / IS NOT NULL | 判断是否为空 IS NULL:判断为空 IS NOT NULL:判断不为空 |
AND | 多个条件成立 |
OR | 多个条件任一成立 |
NOT | 不成立,例:WHERE NOT(salary>100) |
7、排序查询(对结果进行排序,升序或降序,默认升序)
ORDER BY 列名 [DESC][ASC] 降序例:SELECT * FROM zhangwu ORDER BY zmoney DESC;
在含有条件语句时,先过滤条件在排序 例:SELECT * FROM zhangwu WHERE zname LIKE '%支出%' ORDER BY zmoney;
8、聚合(对一列的值进行计算,然后返回一个单一的值,忽略空值)
求个数:COUNT() 求和:SUM() 最大:MAX() 最小:MIN() 平均数:AVG() 例:SELECT COUNT(*) AS 'count' FROM zhangwu;
9、分组查询
GROUP BY 被分组的列名 必须跟随聚合函数一起使用 SELECT查询的时候,被分组的列名,要出现在SELECT选择的列中
例:名字、年龄分组后,人数超过1个的有哪些? SELECT name,age,COUNT(name) AS 'personcount' FROM tablename GROUP BY name,age HAVING COUNT(name)>1;
HAVING:用于分组后的数据过滤
HAVING和WHERE的区别
- HAVING是分组后对数据过滤
- WHERE分组前对数据过滤
- HAVING后可使用分组函数(统计函数)
- WHERE后不可以使用分组函数
10、子查询
SELECT t.* FROM (SELECT name,age,COUNT(name) AS 'personcount' FROM tablename GROUP BY name,age) HAVING COUNT(name)>1;
11、查询行数限制
SELECT * FROM table LIMIT 5,10;#检索6-15行 SELECT * FROM table LIMIT 5;#检索前5行 SELECT * FROM table LIMIT 95,,-1;#检索96到最后一行数据
12、查询组合顺序
SELECT name,age,COUNT(name) AS personcount FROM table WHERE age>22 GROUP BY name,age HAVING COUNT(name)>=1 ORDER BY name desc LIMIT 3;
组合查询要关注查询命令的顺序。
13、join(有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。)