MySQL --- SQL基础知识

2021-07-04  本文已影响0人  _code_x

内连接与左(右)外连接的区别

内连接关键字:inner join on
语句:select * from a_table a inner join b_table b on a.a_id = b.b_id;  
# 组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

左(外)连接关键字:left join on / left outer join on
语句:SELECT  * FROM a_table a left join b_table b ON a.a_id = b.b_id; 
#  left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

右(外)连接关键字:right join on / right outer join on
语句:SELECT  * FROM a_table a right outer join b_table b on a.a_id = b.b_id;  
#right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

# 注意:书写sql语句时连接join关键字的左右两边是将要连接的表,on后边跟着关联条件。

总结:

具体见:https://blog.csdn.net/zjt980452483/article/details/82945663

where、having、group by、order by、limit的区别和使用顺序

select 工资 from 工资表 where id='h0001';
select 部门编号,sum(薪水) from 部门表 group by 部门编号 having sum(薪水)>100000;

ps:相同点:where和having都可以加条件
区别:1.where在分组之前加条件,having在分组之后加条件. 2.where的效率要远远高于having. 分组本身消耗资源非常大.

select 部门编号,sum(薪水) from 部门表 group by 部门编号;
select * from stu_info order by id asc;// 按照id升序排序,其中asc可省略。
select * from stu_info order by id desc; //按照id降序
select * from emp limit 3,10;
综合运用时的使用顺序:

从employee表中查询salary列的值>0且prize字段值>0的记录,结果以id字段分组且降序排列,起始行从0开始,显示5行:

select * from emploee where salary>0 group by id having prize>0 order by id desc limit 0, 5;
结果:查询到的记录条数小于5行,所以只能显示查询到的总行数。

总结顺序: where(条件) - group by(分组) - having(条件) - order by(排序) - limit(限定查询结果)

增删改查命令

#练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
create database if not exists db4 character set gbk

#查询所有数据库的名称:
show databases;

#修改数据库的字符集
alter database 数据库名称 character set 字符集名称;

#判断数据库存在,存在再删除
drop database if exists 数据库名称;


#查询当前正在使用的数据库名称
select database();

#使用数据库
use 数据库名称;

#复制表,注意位置
create table 表名 like 被复制的表名;

#查询表结构
desc 表名;

#删除表中指定列
alter table 表名 drop 列名;

#操作表,列名 + 数据类型,最后一行没有逗号
create table student(
id int,
name varchar(32),
age int ,
score double(4,1),
birthday date,
insert_time timestamp
);

mysql常见函数与数据类型

常用函数:

具体见:https://www.cnblogs.com/duhuo/p/5650876.html

数据类型:

count(1),count(*),count(列)区别是啥?

主要是当数据量达到一定级别,考察基本调优思路。

在Mysql中的不同的存储引擎对count函数有不同的实现方式。

注:下面的讨论和结论是基于 InnoDB 引擎的。
count 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。

所以,count( * )、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。

性能对比:

至于分析性能差别的时候,记住这么几个原则:

mysql常用命令

Structured Query Language:结构化查询语言。其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。

通用写法:

111

什么是sql注入,如何防止sql注入?

所谓SQL注入,黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。

SQL注入攻击的总体思路:

(1)寻找到SQL注入的位置
(2)判断服务器类型和后台数据库类型
(3)针对不同的服务器和数据库特点进行SQL注入攻击

如何防御SQL注入?

数据库设计的三个范式?

巨人的肩膀:

https://blog.csdn.net/qq_44756792/article/details/95610050
https://thinkwon.blog.csdn.net/article/details/106610859

上一篇 下一篇

猜你喜欢

热点阅读