MYSQL 基础(一)

reference 引用
reflect 反射
invoke 生效
properties 拥有的
annotation 注解 an 加强 + not 标记 + ation 行为 → 注解

数据库账号root 密码123456
DataBase 简称DB 数据库

DDL:对数据库和表进行操作

①对数据库
character 特征 character set gbk;
alter 改变 alter database 数据库名称 character set 字符集名称
drop database 删除数据库

use 数据库名称 使用数据库
select database() 查询当前数据库的名称,必须先use数据库名称才能查询数据库名称
②对表
查询表:show tables;
查询表结构:desc 表名;
创建表:crate table(
列名1 数据类型1,
列名2 数据类型2,

列名n 数据类型n
);
SQL数据类型
1.int:整数类型
2.double:小数类型。。。score double(5,2)
3.date:日期,只包含了年月日,yyyy-MM-dd
4.datetime:日期,包含了年月日时分秒,yyyy-MM-dd HH:mm:ss
5.timestamp:时间戳类型, 包含了年月日时分秒,yyyy-MM-dd HH:mm:ss,如果不赋值时间会自动赋值当前的系统时间。
6.varchar:字符串类型
*name varchar(20)姓名最大20个字符,zhangsan 8个字符,张三 2个字符

	   create table student(
	   id int,
	   name varchar(32),
	   age int,
	   score double(4,1),
	   birthday date,
	   insert_time timestamp
	   );

复制表:create table stu like student
删除表:drop table if exists 表名
修改表:1.修改表名: alter table 表名 rename to 新表名;
2.修改表的字符集: alter table 表名 character set 字符集名称;
3.添加一列: alter table 表名 add 列名 数据类型;
4.修改列名称 类型: alter table 表名 change 列名 新列名 新列名类型; 名字类型都改
alter table 表名 modify 列名 列名新类型; 只改类型
5.删除列 alter table 表名 drop 列名;

DML:对表的数据进行操作
1.添加数据:insert into 表名(列名1,列名2,…列名n) values(值1,值2…值n)

2.删除数据:delete from 表名 where 条件;   (DELETE FROM stu WHERE id=1;)  如果不写where 条件会删除所有数据
  truncate table stu --删除表,然后再创建一个一模一样的空表
3.修改数据:update 表名 set 列名1=值1,列名2=值2,... where +条件  如果不写where 条件会修改掉所有的行

DQL:查询表中的记录
1.语法: select 字段列表 from 表名列表 where 条件列表 group by(分组) 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
2.基础查询
1.1 多个字段的查询 select 字段列表 from 表名; 查询表中的记录:select * from 表名; (select 选择)
1.2 去除重复 select distinct 字段列表 from 表名;
1.3 计算列 select 字段列表1,字段列表2,字段列表1+ifnull(字段列表2,0) from 表名; null参与计算,结果仍为null
1.4 起别名 SELECT NAME,math,english,math+IFNULL(english,0)AS 总分 FROM student; 会把math+IFNULL(english,0)改成总分
3.条件查询
1.1 where 子句后跟条件
1.2 运算符 > < = SELECT *FROM student WHERE age>=20;查询年龄大于20岁的
between…and SELECT *FROM student WHERE age between 20 and 30; 查询年龄20和30岁之间
like 模糊查询
*占位符
*_:单个任意字符

​ *%:多个任意字符 SELECT * FROM student WHERE NAME LIKE “马%” ;

	  is null    SELECT * FROM student WHERE english IS NULL; 
	  and (&&)
	  or  (||)
	  not  (!)
4.排序查询(order by)
   SELECT * FROM student  ORDER BY math ;   math成绩升序方式
   SELECT * FROM student  ORDER BY math DESC ;  math成绩降序方式
   SELECT * FROM student ORDER BY math,english ; math成绩升序方式,math成绩一样,再按英语成绩升序
5.聚合函数
  count :计算个数       SELECT COUNT(NAME) FROM student; name一共有几列  
  max   :计算最大值    SELECT MAX(math) FROM student; 数学最大分
  min   :最小值        SELECT min(math) FROM student; 数学最小分
  sum   :和            SELECT SUM(math) FROM student; 数学总分
  avg   :平均值        SELECT AVG(math) FROM student; 数学平均分   SELECT AVG(IFNULL(english,0)) FROM student;
聚合函数排除null 解决方案:选择不包含null的列   或  SELECT COUNT(IFNULL(english,0)) 个数 FROM student;
6.分组查询(group by 分组字段)
   SELECT  sex,AVG(math),COUNT(id)  FROM student GROUP BY sex;   查询女生的数学平均成绩和男生的数学平均成绩
   SELECT  sex,  AVG(math),COUNT(id)  FROM student WHERE math>70 GROUP BY sex;  分数大于70才可以参加比较
   SELECT  sex,  AVG(math),COUNT(id)  FROM student WHERE math>70 GROUP BY sex HAVING COUNT(id)>2;  人数大于2才可以参加比较
   
   where 和 having 比较:
     where在分组之前进行限定,如果不满足条件则不参与分组。having分组之后进行限定,不满足结果就不会被查询出来。
	 where后不能跟聚合函数  having可以
7.分页查询
 1.1 语法:limit 开始的索引,每页的条数;   
  SELECT * FROM student LIMIT 0,3;
  SELECT * FROM student LIMIT 3,3;
  SELECT * FROM student LIMIT 6,3;    开始的索引=(当前的页数-1)*每页显示的条数

你可能感兴趣的:(MYSQL 基础(一))