MySQL

MySQL数据库

  1. 数据类型:int,bit(位) :整数 decimal:小数 varchar(可变字符串)char:字符串

    date,time,datetime:日期时间 enum:枚举类型

  2. 约束参数:primay key :主键约束(区分数据) not null 非空约束(数据不能为空) unique:唯一约束

SQL语句(结构化查询):

数据库操作: 所有语句以分号结尾!!!!!

  • 创建数据库:CREATE DATEBASE db1;
  • 查看数据库:SHOW DATEBASES; SHOW CREATE DATEBASES db1;
  • 创建数据库并指定字符集:CREATE DATEBASE 数据库名 CHARACTER SET 字符集(gbk,utf8mb4);
  • 修改数据库:ALTER DATABASE db1 DEFAULT CHARACTER SET 字符集;
  • 删除数据库:DROP DATABASE 数据库名;
  • 查看正在使用的数据库:SELECT DATABASE();
  • 使用/切换数据库:USE 数据库名;
mysql中表的操作(DDL):
  • 关键字说明:CREATE TABLE 表名(字段名 字段类型1,字段名2 字段类型2…)

    mysql中的数据类型:int,float,double,char,varchar,data

  • 查看表:SHOW TABLES; 查看表结构:DESC 表名

  • 快速创建一个表结构相同的表: CREATE TABLE 新表名 LIKE 旧表名;

  • 删除表:DROP TABLE 表名;

  • 修改表结构:ALTER TABLE 表名 ADD 列名 类型

  • 修改列类型:ALTER TABLE 表名 MODIFY 列名 新的类型;

  • 修改列名:ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;

  • 删除列:ALTER TABLE 表名 DROP 列名;

  • 约束:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yGWZw80N-1673159616612)(C:%5CUsers%5C%E9%93%B6%E6%99%97%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1633960139731.png)]

    设置约束的方式:CREATE TABLE table_name( 字段名 字段类型 约束 );

    添加约束:alter table table_name add constraint 约束名 约束类型(字段名);

    删除约束:删除主键约束:alter table table_name drop primary key;

    ​ 删除外键约束:alter table table_name drop foreign key 外键约束名;

    ​ 删除唯一性约束:alter table table_name drop index 唯一索引名;

DML语句(DDL):
  • 查询表:SELECT * FROM 表名; 除了数值要用单引号引起!!!

  • 插入表:INSERT INTO 表名 (字段1,字段2,…)values(值1,值2,…);全部插入可不写字段

  • 更改表:UPDATE 文件名 SET 变量名=更改值 … WHERE 条件(判断是改哪一个);

  • 删除表:DELETE FROM 文件名 WHERE 判断条件;

  • 蠕虫复制:将原来的数据复制,插入到新的表中 INSERT INTO 新表名 SELETE * FROM 旧表名

    如果只想复制旧表中的某一列的数据到新表中:例:复制student表中name和age到student2表中

    INSERT INTO student2(name,age)SELETE name,age FROM student;

  • 别名查询(优化显示):SELETE name AS 别名,age AS 别名; AS可以省略不写

  • 清除重复值(列不出现重复值):SELETE DISTINCT 字段名(可多个字段) FROM 表名

  • 查询结果参与运算:

    某列数据和固定值运算:SELETE 列名 +固定值 FROM 表名;

    某列数据和其他列的数据参与运算:SELETE 列名1 +列名2 FROM 表名 参与运算的一定是数值类型

    例:SELETE name 姓名, age+10 年龄 FROM student

navicat操作:

条件查询:

  1. ​ 比较运算符:正常编程运算符 和and /or / not 用于WHERE条件语句来进行判断

    ​ SELETE * FROM hero WHERE age>10

  2. 模糊运算符:

    通配符:%:表示任意个字符 _:表示一个字符

    LIKE运算符:

    ​ 例:SELETE * FROM hero WHERE name like ‘孙%’;查询孙姓的人 ‘%孙%’包含孙字的人 ‘孙__’ 查孙xx

    between and还有or、and(区间查询): WHERE id between 100 and 120;

    逻辑语句在WHERE条件句后使用

    IN:WHERE id in(字段名,字段名…)

    IS NULL(判断条件): WHERE benifits IS NULL;

    安全等于:<=> (判断是否等于) WHERE salary <=> 12000;

  3. ORDER BY :可以将查询出的结果进行排序(只是显示方式,不改变数据库的顺序)

    语法:SELETE 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC] ;

    ASC:升序,默认是升序 DESC:降序

    组合排序:SELETE 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段1 [ASC|DESC],字段2[ASC|DESC] ;

  4. 聚合函数:

    count:计算指定列的数值和,如果不是数值类型,那么计算结果为0

    sum:计算指定列的和 max:计算指定列的最大值 min:计算指定列的最小值 avg:计算平均值

    如何使用呢?写在SQL语句SELETE 后 字段名的地方 SELETE COUNT(字段名) FROM 表名;

    round:四舍五入 ceil :向上取整 floor:向下取整 mod:取余

  5. 日期函数:

    NOW():返回当前日期+时间 curdate:返回日期不包含时间 curtime:返回时间不包含日期

  6. 字符函数:

    length(‘字符串’):统计字符串长度 SELETE LENGTH(‘john’)=4

    concat:拼接字符串 SELETE CONCAT (字段1,连接符,字段2) 姓名 FROM 表名

    upper、lower():大小写变化 例:SELETE CONCAT(UPPER(name),LOWER(lastname)) 姓名 FROM 表名

    substr:截取字符串 SELETE SUBSTR(‘字符串’,开始位置索引,结束位置索引(也就是从第几个开始截取));索引从1开始

    instr(字符串,字符串1):字符串1在字符串中第一次出现的索引

    trim(字符串):去除字符串前后空格

    SELETE TRIM(‘a’ FROM,’aaaaazyhaaaaa‘);去除a

    lpad:指定字符左填充指定长度 rpad:右填充 SELETE LPAD(‘字符串’,总长度,‘填充字符串’)

    replace(‘原字符串’,‘要替换的字符串’,‘替换的字符串’);

  7. 流程控制函数:

    IF函数: SELETE IF(判断式,表达式1,表达式2); 判断式为真执行表达式1,为假执行表达式2

    CASE函数:

    CASE 表达式 WHEN 值1 THEN 结果1 WHEN 值2 THEN 结构2 ELSE 结果n END 值是表达式的结果

    CASE 字段名 WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ELSE ‘D’ END

    就类似多重if-else嵌套结构

  8. 分组函数:GROUP BY

    语法:SELETE 字段1,字段2… FROM GROUP BY 分组字段 HAVING 条件 ;分组字段结果相同的为一组

    配合聚合函数一起使用: HAVINGH后面的条件是分组以后执行的条件

    SELETE sum(score) FROM hero WHERE age<30 GROUP BY sex

    SELETE count(*),sex(统计性别) FROM hero WHERE age<30 GROUP BY sex HAVING count *>2

  9. limit限制语句:LIMIT offset ,length;或者 limit length

    offset是指偏移量,就是跳过的记录数量,默认为0;length是指需要显示的总记录

    例:SELETE * FROM student LIMIT 2,6 查询student表中的数据,跳过前面两条,显示6条

  10. 数据库约束:

主键约束:主键必须包含唯一的值 ,主键列不能包含NULL值 PRIMARY KEY

CREATE TABLE hero(id int PRIMARY KEY, name varchar(20));

主键自增:AUTO_INCREMENT表示自动增长

例:CREATE TABLE hero2 (id int PRIMARY KEY AUTO_INCREMENT[=初始值],name varchar)

唯一约束:在这张表中这个字段中值不能重复 格式:字段名 字段类型 UNIQUE

CREATE TABLE hero(id int PRIMARY KEY, name varchar(20)UNIQUE);

非空约束:字段名 字段类型 NOT NULL

CREATE TABLE hero(id int NOT NULL, name varchar(20)UNIQUE);

  1. 添加默认值:字段名 字段类型 DEFAULT 默认值
CREATE TABLE hero2(id int ,name varchar) DEFAULT ‘射手’;   这个以后添加的英雄默认是射手,要想改变默认值,可以覆盖默认值
  1. 内连接:

    等值连接:SELETE 查询列表 from 表名1(别名),表名2(别名)… where 等值连接条件

    ​ SELETE name,boyname FROM beautys,boys WHERE beauty_id=boy_id;

    或者这样:**SELETE 查询列表 FROM 表名1 别名 JOIN 表名2 别名 ON 连接条件 **

    WHERE 筛选条件

    GROUP 筛选条件 GROUP BY 分组条件 HAVING 分组后筛选 ORDER BY 排序列表

    例子:查询部门中员工个数>10的部门名称,并按员工个数降序

    SELETE COUNT(*) 员工个数 ,department_name FROM employee e JOIN department d

    ON e.‘department_id’=d.‘department_id’ GROUP BY d.‘department_id’

    HAVING 员工个数>10 ORDER BY 员工个数 DESC;

    注意事项:

    1. 为了解决多表中的字段命名重名问题,往往为表起别名,提高语义性
    2. 内连接就是输出两表相等匹配的,外连接匹配成功和不成功(NULL)都输出
  2. 外连接(左连接,右连接):

    语法:SELETE 查询列表 from 表1 别名 left/right join 表2 别名

    ​ ON 连接条件 WHERE 筛选条件;

  3. 子查询:

    子查询必须放在条件中,且在条件的右侧;子查询一般放在小括号中;子查询执行优先于主查询

    例1:查询和ZK相同部门的员工姓名和工资

    ​ SELETE last_name ,salary FROM employees WHERE department _id=

    SELETE department_id FROM employees WHERE last_name =‘ZK’ );

    例2:查询工资比公司平均工资高的员工的编号,姓名和工资

    SELETE AVG(salary) FROM employees

    SELETE employee_id ,last_name,salary FROM employee

    WHERE salary>( SELETE AVG(salary) FROM employees);

    例3:查询各部门最低工资,筛选看哪个部门的工资大于第50号部门的工资

    SELETE MIN(salary) ,department_id FROM employees GROUP BY department_id

    HAVING MIN(salary) > ( SELETE MIN(salary)

    FROM employees WHERE d epartment_id=50 );

  4. 多行子查询:

    in:判断某字段是否在指定列表内 x in(10,20,30)

    any/some:判断某字段的值是否满足其中的任意一个 x>(10,20,30)

department_id

HAVING 	MIN(salary)	>	(	SELETE 	MIN(salary)	

FROM	 employees  	WHERE d	epartment_id=50	);
  1. 多行子查询:

    in:判断某字段是否在指定列表内 x in(10,20,30)

    any/some:判断某字段的值是否满足其中的任意一个 x>(10,20,30)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值