-- DDL操作数据库
show databases;#查看所有数据库
show create database new1;#查询某个数据库的创建语句
create database if not exists new1 character set gbk ;#创建数据库(判断是否存在再创建)(设置默认字符集)
alter database new1 character set utf8;-- 修改数据库默认字符集
drop database if exists new1;#删除数据库(判断是否存在)
SELECT DATABASE();#查看当前使用数据库
show variables like 'character_set_database';#查看当前数据库字符集
use new;#使用数据库
/***********************************************************************************************************/
-- DDL操作表
show tables;-- 查询当前数据库中的表
show create table student;-- 查询某个表的创建语句
create table if not exists Student(
id int,username varchar(10),gender char(1),
birthday date,score double(5,2),
email VARCHAR(15),tel VARCHAR(15),status TINYINT
)character set utf8;-- 字段名,类型(判断是否存在)(设置默认字符集)
alter TABLE student character set utf8;-- 修改表默认字符集
drop table if exists s,sd,sttu,stu;#删除表(判断是否存在)
desc stu;-- 查看表结构
CREATE table if not exists sttu like student;-- 复制表(判断是否存在)
ALTER table biao rename to stu;#更改某表名称
ALTER table stu add address varchar(50);#在某表添加一列
ALTER table student modify email VARCHAR(51) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL;#根据列名修改某一列数据类型,可修改字符集,可不用写排序规则
ALTER table student change name VARCHAR(51) CHARACTER SET utf8 DEFAULT NULL;#根据列名修改这列列名和数据类型
ALTER table stu drop addr;#删除列
/***********************************************************************************************************/
-- DML
Insert into Student(id,username,birthday,score)VALUES(1,"多说几句","1-1-1",8.1658),(1,"sd","1-1-0",1.36);-- 如果表后无列名则默认为全列,除了数字其他都要用引号。
DELETE from student where id=1;-- 删除列(可写筛选条件不然为清空)
TRUNCATE TABLE student;-- 删除此表后创建和原来一样的空表,等于清空
-- 另外如果执行清空用下者因为下者时间复杂度为O(1),上者要一条条删时间复杂度为O(n),上者太慢
update student set id=2 where id=1;-- 更改数据(可写筛选条件不然全部行执行此更改)
/***********************************************************************************************************/
-- 总起
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组之后的条件
ORDER BY
排序
LIMIT 分页限定;
/*************************************************************************************/
-- 基础查询
select *from 学生;-- 查询所有字段
select 姓名,年龄 from 学生;-- 查询指定字段
select DISTINCT 地址 from 学生;-- DISTINCT可去重
SELECT 姓名 AS name,数学+英语 AS 总分 FROM 学生;-- 查询可计算用AS可给字段显示赋名且AS可省略,有null参与的计算,结果为null
SELECT 姓名,数学+IFNULL(英语,0) AS 总分 FROM 学生;-- IFNULL(英语,0)函数可将字段中的null“最后”置换为所给值,“最后”意思为条件等操作后的最终显示结果
/*************************************************************************************/
-- 条件查询
>、<、<=、>=、=、<>、BETWEEN AND、IN、LIKE、IS NULL、and、or、not、&&、||、!推荐用字母与或非;
select *from 学生 where 年龄<>20;-- <>不等号
select *from 学生 where 年龄!=20;-- !=也为不等号
select *from 学生 where 年龄 IN (22,18,25);-- 筛选出该字段等于列表中的项
select *from 学生 where 英语 is null;-- null的判断用is null或is not null
select *from 学生 where 英语 is not null;-- .................
select *from 学生 where 姓名 like "%马%";-- _:单个任意字符,%:多个任意字符
/*************************************************************************************/
-- 排序查询
语法:order by 子句
order by 排序字段1 排序方式1,排序字段2,排序方式2...
排序方式:
ASC:升序,默认的
DESC:降序;
select *from 学生 where 年龄!=20 ORDER BY 数学 DESC, 英语 ASC;-- 排序优先级从前往后递减
/*************************************************************************************/
-- 聚合函数
将一列数据作为一个整体,进行纵向的计算:count:计算个数 max:最大值 min:最小值 sum:和 avg:平均值,计算对象为“最后”显示结果,比IFNULL(expr1,expr2)还后;
select IFNULL(英语,0)from 学生 where 英语<80;
select count(英语) from 学生;-- 会排除值为null的项
select count(IFNULL(英语,0)) from 学生;-- 通过ifnull避免排除值为null的项
select count(*) from 学生;-- *避免了单行null值影响计算
/*************************************************************************************/
-- 分组查询
语法:GROUP BY
注意:
分组之后查询的字段:分组字段、聚合函数,其他的无意义;
where和having的区别:
where在分组之前进行筛选,如果不满足条件,不参与分组。不能跟聚合函数
having在分组之后进行筛选,如果不满足结果,不会被查询出来。能跟聚合函数;
SELECT 性别,avg(数学) from 学生 WHERE 数学>70 GROUP BY 性别 HAVING count(编号)>2;-- 按照where条件筛选出来的进行分组,再根据HAVING条件进行筛选从而显示,having条件可根据前面的AS来写,一般having的条件是根据分组后的结果来写
/*************************************************************************************/
-- 分页查询
语法:limit开始的索引,每页查询的条数
limit是mysql专有方言;
select *from 学生 LIMIT 0,3;-- 根据索引,长度分页,既然是索引当然是从0开始
/*************************************************************************************/
-- 约束
|