MySQL基础语法
目录
一.Navicat与MySQL简单介绍
1.MySQl环境变量的配置
这里https://blog.csdn.net/weixin_39874809/article/details/113195934有详细的环境变量配置过程,这里就不再赘述
2.了解navicat
Navicat是一套快速的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。
二.sql基础语法之运算符
1.比较运算符
= | 等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
<>(!=) | 不等于 |
2.算数运算符
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模 |
3.逻辑运算符
and | and左右两边布尔表达式都为ture时返回true |
or | or左右两边布尔表达式都为false时返回false |
not | 取反布尔表达式 |
三.sql基础语法之语句
写在前面:sql中的命令语句对于大小写字母并不敏感
(蓝色字体为sql中的关键字)
首先笔者要导入excel表格以便于代码演示:
导入表格 hero.csv(该表格有4列50行,这里只展示了前10行)
数据简要介绍:id栏为编号,hero为电影正面角色名字,actor为演员名字,film为电影名
导入表格movie.csv (该表格有6列280行,这里只展示前10行)
数据简要介绍:rank栏为编号,title为电影名,distributor为电影导演,year为电影出品年份,gross为上映当年的电影票房,adjusted为至今电影总票房
导入表格villain.csv(该表格有4列50行,这里只展示了前10行)
数据简要介绍:id栏为编号,villain为电影反派角色名字,actor为演员名字,film为电影名
1.select语句
结构:
select column_name,column_name
from table_name;如果要选取一个表单中所有列可以使用*来代替:select * from table_name;
作用:
提取文档中的某几列
代码演示1(挑取hero表格中 hero和actor两列):
代码演示2(挑取hero表中全部列)
2.select distinct语句
结构:
select distinct column_name,column_name
from table_name;作用:
提取文档某几列中不相同的属性
代码演示(挑取hero表actor和filml两列中的不相同属性值):
3.where子句
结构:
select column_name,column_name
from table_name
where column_name operator value;作用:
提取满足指定条件的文档属性
代码演示(挑取movie表格中出品电影年份大于1950年且小于1990年的元素,展示其电影名,年份和导演)
4.ordered by语句
结构:
select column_name,column_name
from table_name
ordered by column_name,column_name ASC|DESC;作用:
用于对结果集按照一个列或者多个列进行排序。
默认按照升序对记录进行排序,如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
代码演示(挑取movie表格中出品电影title,distributor和year大于1950且小于1990元素,并按照年份的降序对结果进行排序)
5.insert into语句
结构:
(1)第一种结构:无需指定要插入数据的列名,只需提供被插入的值
insert into table_name
values (value1,value2,value3,...);(2) 第二种结构:指定列名及被插入的值
insert into table_name (column1,column2,column3,...)
values (value1,value2,value3,...);作用:
用于向表中插入新记录
代码演示
不指定数据列名时(在表hero中插入电影“kill bill”):
!注意:这里的 “51”不可省略,否则回报 Column count doesn't match value count:
指定数据列名时(在表movie中同样插入电影“kill bill”):
6.update语句
结构:
update table_name
set column1=value1,column2=value2,...
where some_column=some_value;作用:
更新表中已存在的记录
代码演示(表movie电影名为“kill bill”的元素更新为“The Shawshank Redemption”)
7.delete语句
结构:
delete from table_name
where some_column=some_value;
作用:删除表中的行
代码演示(清除之前更新的电影名为“The Shawshank Redemption”表单元素)
8.join on语句(联结表)
结构:
(1)内联结(inner join):挑取所选表中所有符合条件的行,并联结成一张新表
(2)外联结(outer join):【1】左联结:left join(left outer join)挑取所选表中所有符合条件的行,同时与左侧表所有行联结成一张新表
【2】右联结“right join(right outer join)挑取所选表中所有符合条件的行,同时与右侧表所有行联结成一张新表
(3)全联接(full join(相当于left join 与 right join的结合)):将所选表中所有符合条件的行连同所选表所有行一同组成一张新表
注意:一些版本sql不支持全联结,这里理解就好
(4)交叉联结(cross join(相当于所选表之间进行矩阵乘法)):将所选表的所有行与余下每一张表的所有行进行联结,成为一张新表
文氏图演示:
作用:
join语句一般关联于on子句;根据where子句中列出的条件,联结两张或多张表。
联结表详情请参考链接:https://blog.csdn.net/weixin_42423817/article/details/113320670
代码演示:
挑取既扮演过正面角色同时也扮演过反派角色的电影演员组成一张新表
(1)内联结:
(2)外联结:
【1】左联结:
【2】右联结:(3)交叉联结:
9.as语句(别名)
结构:
(1)列别名:
select column_name as alias_name
from table_name;(2)表别名:
select column_name(s)
from table_name as alias_name;作用:
为表名称或列名称指定别名
代码演示:
(1)给列起别名
(2)给表起别名:
10.group by语句(数据分组处理)
结构:
select column_name, aggregate_function(column_name)
from table_name
where column_name operator value
group by column_name;作用:
结合聚合函数,根据一个或多个列对结果集进行分组
代码演示(跟据电影当年票房收入(gross)分组计算每个导演(distributor)带来的平均票房收益):
根据电影出品至今总票房收入(adjusted)分组计算每个导演(distributor)带来的平均票房收益:
11.having子句(数据过滤)
结构:
select column_name, aggregate_function(column_name)
from table_name WHERE column_name operator value
group by column_name
having aggregate_function(column_name) operator value;
作用:
同where子句作用,专门用于数据处理
代码演示(在原有数据分组处理的基础上添加having子句,挑取除当年电影票房大于20,小于80的数据):
在原有数据分组处理的基础上添加having子句,挑取除从电影出品至今总电影票房大于200,小于800的数据
12.create database语句(创建表)
结构:
create DATABASE dbname;
作用:
用于创建数据库
三.sql基础语法之函数
1.聚集函数
avg() | 返回数值列的平均值 |
count() | 返回匹配指定条件的行数 |
first() | 返回指定的列中第一个记录的值 |
last() | 返回指定的列中最后一个记录的值 |
max()和min() | 返回指定列的最大值(最小值) |
sum() | 返回数值列的总数 |
2.文本处理函数(字符串处理函数)
ascii() | 返回字符串最左端字符的ASCII值 |
char() | 将ASCII值转换为字符 |
lower()和upper() | 字符串全部转换为小写字母(大写字母) |
str() | 数值型数据转换为字符型数据 |
ltrim() | 去掉字符串左侧空格 |
rtrim() | 去掉字符串右侧空格 |
left(string,number) | 返回字符串stirng左数number个字符组成的字符串 |
right(string,number) | 返回字符串string右数number个字符组成的字符串 |
substring(string,position,number) | 返回字符串string左数第position位置开始number个字符组成的字符串 |
replace(string1,string2,string3) | 用string3替换string1中的子串string2 |
replicate(string,number) | 返回重复string字符串number次的字符串 |
reverse(string) | 颠倒字符串string的在字符排列顺序 |
space(number) | 返回number长度的空字符串,若number为负值,则返回null |
stuff(string1,position,number,string2) | 用string2替换string1中从position开始的number个字符的字符串 |
对于字符串的处理,笔者在这里用代码简单演示:
首先挑取既扮演过正面角色同时也扮演过反派角色的电影演员:比对数据笔者选择电影名为“The Terminator” villain表中actor元素使用right()函数和left()函数输出演员的firstname和familyname:
再使用upper()函数和lower()函数将firstname转为小写,familyname转为大写:
对于关与字符串处理的其他函数读者可以自行尝试
3.时间处理函数
year()/month()/day() | 返回日期中的年份部分/月份部分/天数部分 |
dateadd(date,number) | 返回date加上额定日期number的结果 |
datediff(date1,date2) | 返回date1和date2之间的差值1 |
date(date) | 返回日期时间的日期部分 |
curtime()/curdate()/now() | 返回当前系统时间部分/日期部分/所有部分 |
代码演示(显示当前系统时间):