SQL速通-001.001-安装MySQL数据管理系统
下载地址
搜索 mysql community download
跳转到 mysql 的官方网站的社区版下载网页。
版本选择
选择 8.0
版本,选择离线安装版。
安装时注意点
- 可能是家庭版系统的原因,安装时不能选择 development 模式,只好选择
custom 模式,然后额外选择了
odbc
,c++
之类的。 - 可能是家庭版系统原因,不能选择安装位置,只能默认安装到 C盘,安装完成大约占用 10G 空间。
- 安装一路下一步即可。
- 安装时提示没有 visualstudio 也没有关系,这个 vs 连接 mysql 的驱动可以在官网下载,搜索
mysql for visual studio
即可。
SQL速通-003-小查询里有故事
概述
- sql 分为 server 和 client 两大块
- 使用时我们在 client 中输入命令,client 把命令通过网络传递给 server
- server 执行命令并通过网络把结果返回给我们
use
在使用 select 等语句前,一定要确认是否选中了需要用到的 库, 如果没有,那么需要使用 use 命令来选择。
大小写是否敏感
在 win 系统默认不敏感,在 linux 系统默认敏感。 具体还要看是否设置了大小写敏感。
query
- 在一个查询行为中可包含多个查询语句。
- 一个查询行为只会产生一个查询结果,也就是说查询行为的次数与查询结果的个数是对应的。
- 一个包含多条查询语句的查询行为会产生一个查询结果,而在这个结果中包含多个表。
SQL速通-004-万变不离其宗
语法
sql 语法其实就是层层嵌套的套娃语法。基本就是对 select 的层层包装。
select Name from
(select * from abc) as ddd
上面这个就是先从 abc
这个表里面获取数据,然后使用 ddd
这个别名。然后从 ddd
中获取 Name
这一列的内容,作为最终的结果集。
SQL速通-005-数据从何而来
列
select * from abc
指的是获取 abc 表中的所有列select Name from abc
指的是获取 abc 表中的 Name 这一列。
as
as 表示别名。
SELECT P.FirstName, P.MiddleName, P.LastName
FROM Person.Person AS P
derived_table
嵌套时使用,下面括号中的就是 derived_table
SELECT * FROM
(SELECT FirstName, MiddleName, LastName
FROM Person.Person) AS PersonName
view
如果某个 derived_table 经常使用,就可以专门拿出来作为 view,方便使用。
正交组合
SELECT * FROM abc, def
最后的结果是 abc 和 def 中的数据做笛卡尔乘积,如果他们都是 10 行两列,那么最终的结果就是两两组合 10 x 10 = 100 行。
SQL速通-006-给数据做个按摩
正交组合
SELECT * FROM abc, def
这个是组合后一共 100 行数据SELECT abc.* FROM abc, def
这个还是一共 100 行数据,只不过只显示 abc 的数据而已。
字符串拼接
- sql server 中,可以直接使用
+
来拼接字符串 - mysql 中,只能使用
concat
来拼接字符串
去重
- distinct 去重,如果只选择一列,那么就是不重复的,如果是多列,那么就是组合是不重复的。
- all 代表所有,和 distinct 相反。
数量限制
- sql server 中使用 top 来限制返回的数量
- mysql 中使用 limit 来限制数量
select CountryCode from city limit 0, 7;
SQL速通-007-源数据的筛选及CTE
- from 前面是结果集,后面是数据源。
- where 只能从数据源中进行筛选. 可以把结果集外面加括号,做成一个嵌入进去的数据源。
- 但是不建议使用嵌套写法,理解麻烦,建议使用 with 语句,方便理解。
查找姓名首字母
有问题
select concat(substring(firstname,1,1),substring(lastname,1,1)) as initial
from person.person where initial='TL'
有问题:筛选的来源必须是数据源,而不能是操作的数据。
筛选过程中使用数据源
select concat(substring(firstname,1,1),substring(lastname,1,1)) as initial
from person.person
where concat(substring(firstname,1,1),substring(lastname,1,1))='TL'
缺点:出现重复语句,后期修改时如果没有全部修改,容易出现错误
把修改的数据做成数据源的形式便于筛选
select * from
(select concat(substring(firstname,1,1),substring(lastname,1,1)) as initial
from person.person) as personname
where initial='TL'
缺点:出现了select的嵌套,不利于后期修改
CTE(Commen Table Expression):先设置好被嵌套的表,后面再引用
with personname as
(select concat(substring(firstname,1,1),substring(lastname,1,1)) as initial
from person.person)
select *
from personname
where initial='TL'
优点:易懂,易修改
SQL速通-007.001-神隐的布尔类型
- sql server 中不支持直接使用 bool,比如
select 2=2
这个就不行。只能使用if 2=2 select 'True' else select 'False'
这种形式 - sql server 中支持隐式的使用 bool, 比如下面代码中的 where 部分
- mysql 中支持直接使用 bool,
select 2=2
返回 1, 错误返回 0
select *
from city
where Population > 100000 and Population < 200000;
SQL速通-007.002-数据的比较
cast
cast 可以转换类型
select 100 = cast('100.1' as float);
科学计数法
- sql server 不支持科学计数法的隐式转换
- mysql 支持
select 100.1 = '1001e-1';
字符串
支持字符串大小比较。
select 'Tim' < 'Timo';
日期
可以使用 cast 来强制转换,也可以隐式转换。
cast('2012-01-01' as datetime)
float and real
- 整型精度最好
- 非整型中 float 的精度比 real 的精度要好。
SQL速通-007.003-字符串的筛选
大小写敏感
- sql server 中要看数据库中的
collation
模糊搜索
where Name < 'C'
开头小于 C 的字符串where Name like '%AA%';
中间是 AA,前后随意where Name like '%AA_';
倒数 2,3 是 AA,其他随意
类正则
- mysql like 不支持方括号匹配,需要 regexp 才支持,并且必须是正则语法。 sql server like 直接支持。
[ac]%
只能 a 或者 c开头[a-z]%
a-z 都可以开头[^ac]%
不能 a 或者 c 开头5[%]%
开头是5,后面接着一个 %,再后面任意字符。 或者 5/%% escape ‘/’ 表示斜杠后面紧跟的是原始字符。
参考
- MySql详细安装教程
- Visual Studio 2019连接MySQL数据库详细教程
- SQL速通-003-小查询里有故事
- 03笔记
- SQL速通-004-万变不离其宗
- SQL速通-005-数据从何而来
- {笔记}SQL速通-005-“第一根枝条”-数据从何而来
- SQL速通-006-给数据做个按摩
- {笔记}SQL速通-006-给数据做个按摩
- SQL速通-007-源数据的筛选及CTE
- 07笔记
- {笔记}SQL速通-007-源数据的筛选及CTE
- SQL速通-007.001-神隐的布尔类型
- {笔记}SQL速通-007.001-神隐的布尔类型
- SQL速通-007.002-数据的比较
- 007.002笔记
- SQL速通-007.003-字符串的筛选