SQL语句这一篇就够了(超级详细)

目录

MySQL是什么

MySQL基本指令

DDL

sql

插入数据:

删除数据:

修改数据:

DQL(查询)

查询语句:

注意事项:

条件查询:

嵌套查询和关联查询

嵌套查询

关联查询

注意事项:

数据库的常用类型

tips:

数据库索引

        主键(primary key)

数据库面试问题

mb3和mb4有什么区别

数据库连接命令是什么

varchar和char的区别


MySQL是什么

Mysql是一个数据管理系统,管理的是数据库,mysql下可以管理多个数据库。

关系数据库中用表存储信息。

支持连接数100个用户

MySQL基本指令

DDL

查看数据库

show databases;

进入数据库

use 数据库名;

查看数据库的表:

​​​​​​​show tables;

新建数据库:

create database 数据库名;

删除数据表:

​​​​​​​dorp table 表名

sql

插入数据:
insert into 表名(字段,字段)value(数据,数据);
# 如果要插入所有列的数据,可以不标明列名,但是插入的值,必须按照列的顺序。
insert into 表名 value(数据,数据,数据);
# 可以一行sql,使用values插入多条数据。
insert into 表名 value(数据,数据,数据),(数据,数据,数据);
删除数据:
delete from student where name='王刚';
修改数据:
update student set age=20 where name=’李白‘;

DQL(查询)

查询语句:
select * from student; 查询student表中的所有数据。
select student_id,student_name from student; 查询指定的列名。
注意事项:

在工作环境中不要(尽量避免)使用 *  查询 数据安全 IO 网络三方面。

可以使用as对列名起别名。对结果集的列命名

as name name是蓝色的 关键字 有些关键字会改变语法语义可以使用着重号``

条件查询:

根据指定的条件,检索数据,返回执行结果。

select student_id,student_name,birthday,gender from student 
where student_name='李四';

多条件查询:

select student_id,student_name,birthday,gender from student 
where student_name='李四' and student_id = 9;
select student_id,student_name,birthday,gender from student 
where student_name='李四' or gender = '女';

 使用in 关键字匹配多个值

SELECT * FROM student WHERE student_id IN (1,3,8,10,12);

也可以使用not in 排除匹配项


SELECT * FROM student WHERE student_id NOT IN (1,3,8,10,12);

模糊查询:

查询学生表中姓名姓张的学生:

SELECT * FROM student WHERE student_name LIKE '张%'

查询学生表中姓名三个字的学生:

SELECT * FROM student where student_name LIKE '___';

查询学生表中姓名姓张两个字的学生:

SELECT * FROM student WHERE student_name LIKE '张_';

查询学生表中姓名带张的学生:

SELECT * FROM student WHERE student_name LIKE '%张%';

排序:

排序方式 order by

正序(升序) ASC (默认)

倒序 (倒叙)DESC

SELECT * FROM student ORDER BY student_id DESC;

也可以使用多列进行排序 当第一列的值相同时再通过第二列的内容进行排序

SELECT * FROM student ORDER BY student_name,student_id DESC;

以上的sql语句order by 之后按照student_name 正序排列,student_id倒序排序

每一列都有自己的排序方式,不写就是默认 ASC

部分查询:(LIMIT)从开始

部分查询 比如查询前三名

查询前三个数据 LIMIT

select * FROM student LIMIT 3;

查询4-7

select * from student limit 3,4;

前三名就是

select * from student limit 0,3;

合并查询:

union 和union all 都有合并多个sql语句的作用

union 会将结果一样的数据合并一个(去重)(整体去重)

union 前后关联的结果集的列数必须一样类型无关

select student_id from student union select * from student;

结果去重:(DISTINCT)

SELECT DISTINCT name FROM student;

注意:以上SQL语句DISTINCT是对结果集去重,并不是对name去重

嵌套查询和关联查询
嵌套查询

一个查询语言中嵌套这另一个查询

实例 有不及格成绩的学生的信息

-- 成绩表中不及格的信息

SELECT * FROM score WHERE score < 60;

-- 有不及格成绩的学生的信息

方式一

SELECT DISTINCT * FROM student,score WHERE 
score.score < 60 and student.student_id = score.student_id;

方式二

SELECT student_name FROM student WHERE student_id in
 (SELECT DISTINCT student_id FROM score WHERE score < 60);

将子查询当做一个表进行二次查询

-- 总成绩最高的学生id

 SELECT * FROM( SELECT student_id,SUM(score) as sumscore FROM score GROUP BY student_id )
 as a ORDER BY sumscore DESC LIMIT 1;

-- 当将子查询当做表进行二次查询 需要给子查询起别名

关联查询

-- 当我们所需要的查询结果在两张表或者多张表中,这是就需要关联查询。

-- 查询 学生的名字和成绩 学生名字在student 成绩 score

-- 将多个表的数据按照一定的条件 关联在一器

-- 左连接 右连接

-- left join 以左表为主表 结果集中包含主表的所有数据,结果集中显示副表中和主表有关联的数据

SELECT a.*,b.* FROM student a left JOIN score b on a.student_id = b.student_id;

-- 内链接 只显示两个有关联的数据

SELECT a.*,b.* FROM student a INNER JOIN score b ON a.student_id = b.student_id;

-- mysql不支持全外链接 full join Oracle 支持

-- mysql 借助union实现全外链接

SELECT a.*,b.* FROM student a left JOIN score b on a.student_id = b.student_id;
 UNION
 SELECT a.*,b.* FROM student a RIGHT JOIN score b on a.student_id = b.student_id;
注意事项:

NULL值 sql中对空值的判断 不能用= 使用is,非空验证用 not null

数据库的常用类型

整数类型

tinyint(0-255)1字节

int 4字节

文本

char(定长)

varchar(变长)

text

浮点型

double(7,2)

decimal(10,2)

时间

tips:

double时双精度的而decimal是精确的我们建议使用decimal保存金融、汇率、税率、价格等

数据库是需要优化的其中之一是选择合适的数据类型

数据库索引

        主键(primary key)

数据库面试问题

mb3和mb4有什么区别

        首先m表示max,b表示byte,mb3表示一个字符最多占用三个byte同理mb4占用4个,最大的不同在于mb4比mb3多出来的一字节可以表示表情文字。英文占用一个字节、中东地区的阿拉伯语占2字节,东亚地区语言占3字节。

数据库连接命令是什么

        mysql -u root -p;

        -u:代表用户

        root是超级用户

        -p: 是密码

varchar和char的区别

        varchar是可变的文本类型更加灵活,节省空间,但是char类型的性能更好特别是查询数据时。

  • 69
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值