mysql 基础语法

Sql分类:

1)DDL(数据库定义语言)  例如:create  , drop , alter等  主要操作数据库和表

2)   DML  (数据库操作语言)  例如:insert, delete, update等  主要操作数据表的数据

3)   DQL  (数据库查询语言)  例如:select,where等

4)   DCL  (数据库控制语言)  例如:grant,revoke等

 

数据库的操作:

查询数据的字符集:  show create database 数据库名;

设置字符集: create database if not exists  数据库名 character set jbk 

修改字符集:alter database 数据库名 character set utf8

 

表的操作:

show tables 显示所有表

des 表名 查询表的结构

表的创建

show create table 表明  可以查看创建表的详细sql语句

 

 

 

 

数据的操作:

-- 排序
SELECT * FROM students ORDER BY math DESC; -- 降序
SELECT * FROM students ORDER BY math ASC;  -- 升序
SELECT * FROM students ORDER BY math DESC,english ASC;

-- 聚合函数 count max min sum avg   --特点显示只有一条数据
SELECT COUNT(math) AS '共计人数' FROM students ;  
SELECT COUNT(IFNULL(math,0)) FROM studnets;  -- count不会统计0 所以解决方式加ifnull();或者换成统计非空的字段

SELECT MAX(math) FROM students
SELECT MIN(math) FROM students;

SELECT SUM(english) FROM students

SELECT AVG(english) FROM students


-- 分组查询  
-- 一定要注意:分段之后查询的字段要么是“分组的字段" 要么是 ”聚合函数") 不然没有任何的意义!
SELECT sex,COUNT(sex) FROM students GROUP BY sex
SELECT sex,AVG(math) FROM students GROUP BY sex
SELECT sex,AVG(math),COUNT(id) FROM students WHERE math >5 GROUP BY sex
SELECT sex,AVG(math),COUNT(id) FROM students WHERE math >5 GROUP BY sex HAVING COUNT(id)>1 -- 分组后只刷选人数大于1的分组


-- 分页查询
SELECT * FROM students WHERE NAME LIKE '%h2%' LIMIT 0,3  -- 开始的索引 =(当前页-1)*每页显示的条数


-- 去除重复结果集 destingct
SELECT DISTINCT NAME,address FROM students;


-- 计算
SELECT age,sex,address,math+english FROM students
SELECT age,sex,address,math+IFNULL(english,0) FROM students


-- 条件查询   >, < , = ,!=, <>不等于,&& 并且,and, between...and , or, >=, <=,in()
-- 特殊 
SELECT * FROM students WHERE english = NULL -- 是错误的写法 ×
SELECT * FROM students WHERE english IS NULL;  -- 或者 is not null
 
 -- 模糊查询 like  _代表字符  %代表多个字符
 SELECT * FROM students WHERE NAME LIKE '%h%';
 SELECT * FROM students WHERE age LIKE '_4';
 
 
 
 
 
 -- 约束
 -- primary key  auto_increment
 -- not null
 -- unique  
 -- froeign key 外键约束

-- not null 
 ALTER TABLE students MODIFY NAME VARCHAR(20) NOT NULL;  
 
 -- unique
 ALTER TABLE students MODIFY id VARCHAR(32) UNIQUE;
 
  -- primary key
  -- 删除主键
  ALTER TABLE students DROP PRIMARY KEY   -- 错误的写法 alter table students modify id int
 
 
 
 
 
 
 
 
 
 
 -- 外键约束
 CREATE TABLE xx(
    
    -- 格式 CONSTRAINT 随意取名称 FOREIGN KEY(dep_id) REFERENCES 表名(id)
    CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES 表名(id)
 );
-- 删除外键 
ALTER TABLE students DROP FOREIGN KEY xxxxx;
-- 添加外键
ALTER TABLE students ADD FOREIGN KEY (dep_id) REFERENCES 表名(id)  

CREATE TABLE T1(

     id INT PRIMARY KEY AUTO_INCREMENT, -- id 为int类型时 才可以使用 auto_increment!
     NAME VARCHAR(32) NOT NULL,
     dept_id INT(32),
     CONSTRAINT t1_fk FOREIGN KEY(dept_id) REFERENCES T2(id)  -- 创建外键一定要注意的是外键的类型与关联字段的类型一定要保持一致!!!
)


-- 级联操作
CREATE TABLE T1(

     id INT PRIMARY KEY AUTO_INCREMENT, -- id 为int类型时 才可以使用 auto_increment!
     NAME VARCHAR(32) NOT NULL,
     dept_id INT(32),
     CONSTRAINT t1_fk FOREIGN KEY(dept_id) REFERENCES T2(id) ON UPDATE CASCADE ON DELETE CASCADE  -- 创建外键一定要注意的是外键的类型与关联字段的类型一定要保持一致!!!
)

 

posted @ 2020-05-13 12:05  gaoshengjun  阅读(162)  评论(0编辑  收藏  举报