声明
速成的思路始终是有问题的,并不提倡这么做。但是好像在这么一个追求速度的环境(Working Space/Studying Environment)里面,好像所有人一边唾弃速成的学习方式,一边又巴不得一天之内学完所有现有popular技术栈。
SQL基础
SQL与数据库概念
数据存放在数据库(database)中。
SQL是Structured Query Language的缩写,中文:结构化查询语言。
SQL是用于访问和处理数据库的标准计算机语言。SQL语言用来对数据库进行特定操作,灵活度不如现有的高级语言,最初接触到的时候觉得很无聊不以为然,学到后面才知道掌握SQL语句的重要性。
SQL特点:
- SQL只说明要做什么,不说明怎么做。
- 功能强大,简单易学。
- 标准化,几乎所有关系型数据库都通用
- 不区分大小写
现有popular数据库
- MySQL 自带客户端:mysql
- Oracle 自带客户端:sqlplus
- SQLServer 自带客户端:Azure Data Studio
- PostgreSQL 自带客户端:psql
基础扫盲之后,开始进入实战环节。(极速)
Mysql初体验
组件:Mysql
Mysql安装教程网上随便一搜一大堆,此处不再浪费篇幅赘述。安装完Mysql以后,现在开始进行项目开发config。
首先设置环境变量。
命令行工具的根本依据就是环境变量,每一个命令头都来自于一个.exe程序,我们要使用mysql,可能不会次次都使用CommandLine进行开发,有可能直接从cmd打开Mysql,所以必须将Mysql的相关命令行工具的路径设置到系统变量里面。
C:\Program Files\MySQL\MySQL Server 8.0\bin
这是我的Mysql安装路径,我相信绝大部分人也是如此,直接把你自己安装的路径粘贴到系统环境变量Path里面即可。记住一定要有\bin这个路径,否则无法使用命令行工具。
打开cmd
mysql -u root -p
然后它会让你输密码,输入root即可。(绝大部分人的账号和密码应该都是root和root)
到这里就是成功。以上的过程,其实被称为一次“连接”,指的是外部操作接入数据库的过程。我们在使用NaviCat对数据库进行操作的时候,第一步就是建立连接/打开连接,这一步同样需要输入用户名和密码才能连接成功。
如果有退出到cmd的需要,直接输入exit即可。
SQL语句
选择数据库/新建数据库
首先,使用show databases;,选择一个数据库。
单从这句话就可以对SQL语句展开分析:SQL语句不区分大小写,必须以分号结尾。
Mysql可以理解为一个数据库的总管,它其实是一个Database Driver,包含/管理了很多个不同的databases,而每一个database里面又有自己的不同数据内容。
如果没有数据库,使用create database xxx;创建一个。xxx是你自己想要取的名字,记得句末一定要加分号。
使用use xxx;选择一个数据库。
如果整不明白,跟着我的步骤来:
尝试创建一张表格
有这样的SQL语句:
create table dept(
deptno int primary key,
dname varchar(9),
loc varchar(10));
看起来确实没有高级语言的编排那么舒服,但是意思明白就行。
这里不用被换行吓住,当你输入在第一行末尾输入回车的时候,命令行的状态是这样的:
它在等待你的输入。
SQL语句会一直读到;才会执行,所以勇敢往下输就行。
int、varchar(n)都是类型,而primary key是主键。
有关主键:
主键全称:主键约束,每一个表通常都必须设置一个主键。
每个表只能定义一个主键
主键唯一且不能为null,表中不可能有两条记录的主键是相同的。
创建员工表:
create table employees(
empno int primary key,
name char(10) not null,
deptno int,
manager int,
hiredate date,
salary numeric(7, 2));
not null表示不能为空,date类型表示日期,(不是时间);numeric(7, 2)表示:总长度7位,精确到小数点后两位,值得注意的是这个总长度包含了小数点,也就是说整数位=总长-小数点位。
varchar和char的区别:varchar可以改变长度,char不可以。
尝试向表格中插入记录
我们对表格中的一行数据称为一个记录,每个列的头部称为一个字段。
插入的SQL语句有两种写法:
insert into [chart name] values(...)
insert into [chart name] (字段名1,字段名2...) values(...)
比如在这里我们向员工表按照第一种方式插入数据:
我们再向员工表中按照第二种方式插入数据,这种方式可以自行选择插入的字段:
注意无论是varchar还是char,在使用insert语句时,都要用单引号括起目标。
SELECT查询语句
select一般有两种写法
select * from 表名
select 字段1,字段2 from 表名
DISTINCT去掉一个字段中的重复记录
这里我们拿manager这个字段举例,因为有较多重复。
select manager from employees;
select distinct manager from employees;
需要注意的是,这句话仅仅只是在查找过程中去重,而不是直接删除一条记录。
Where条件过滤
select 字段名 from 表名 where 字段 运算符 值;
相关运算符:
需求1:从员工表里面找出在2号部门工作的员工的名字和薪水
select name,salary from employees where deptno=2;
需求2:从员工表里面找出在2022-01-01之前雇佣的员工的名字和薪水和从属经理
select name,salary,manager from employees where hiredate<'2022-01-01';
可以看到已经没有了张三,因为张三的hiredate是2023-01-17。
and和or运算符
对于where语句,我们还可以在where后面设置多个bool表达式来进行判定。 需求:从员工表里找出在部门1工作且工资大于等于5000的员工的名字和薪水
select name,salary from employees where deptno=1 and salary>=5000;
可以看到已经没有张三,因为张三的工资是4400,被滤掉了。
Like匹配字符串
在查询过程中经常会遇到查不准的现象,这时候就需要一个东西帮忙匹配相应字符串了
select 字段1,字段2 from 表名 where 字段名 like 'xx%';
需求:查找在一楼有哪些部门
select * from dept where loc like '一楼%';
in匹配多个值
in实际上相当于多个or合并,实现精准/多项查询
select 字段1,字段2 from 表名 where 字段 in (值1,值2...);
select name from employees where empno in (3,5);
等价于
select name from employees where empno=3 or empno=5;
SubQuery子查询
在这里也可以写一点从句,加深对SQL语法的理解
select * from employees where deptno in (select deptno from dept where loc like '一楼%');
查询部分的语法到这里展示完成,如果需要更多语句学习请见相关教程。
update更新记录
update 表名 set 字段1=值1,字段2=值2... where 字段名=值;
通常来说,后面的where语句都是要加上的,因为where起到筛选的作用,如果不加where则会对整张表格进行修改,所以一定要慎重。
delete删除记录
delete from 表名 where ...
如果不加delete,会删除整张表。
例子:
我们想删除空记录,那么就查找到id(主键),并且删除。
delete from ginchat.user_basic where id=10;
即可完成操作。
到这里我们可以做如下总结:
- insert插入记录,select选择记录并且可视化,where查找记录并给出查找结果,update修改已有记录,delete删除记录。
- where非常关键,如果不筛选可能会对整张表进行操作。
- SQL入门层次:知道数据库的概念,有哪些层。连接->use database,再来对数据库进行操作。
join连接查询
join用来查找在两个表中出现的相同的字段的相关内容。
共有三种join方式:inner join, left join, right join.
select 字段1,字段2 from 表名1 [inner/left/right] join 表2 on ... where ...
字段可以跨表,比如name和dname是两张表中不同的字段,在这里依然可以把他放到select后面进行查询。
比如部门表和员工表都有deptno这个字段,现对他展开查询。
两张表好像被拼接到了一起。
其他
后续教程参照:SQL菜鸟教程
后记
黑乎乎命令行不好使,开发过程不方便,本人使用vscode与.sql文件处理数据库。
在通过VSCode连接Mysql时出现了问题。
注意:有一个database叫mysql,一般记录用户数据的,不用于实际开发使用,修改用户名和密码也是在mysql这个database中进行操作。
后续操作步骤:点开VSCode数据库->选择一个连接->输入密码->连接成功->通过对.sql文件书写->点击Run on active connection运行
对.sql文件的操作是建立在连接成功的基础上,没有连接则无法运行.sql文件。一份.sql文件理论上只能跑一次,它不能像debug过程一样写一点试一点,而是要写完了之后再统一运行。 如果后一次运行的时候有前一次的代码内容,请删除前一次的内容。