SQL和MySQL的区别

很多同学在最开始接触数据库的时候,可能都会有一个疑问,什么是SQL?什么是MySQL?他们究竟有什么不同?其实,MySQL是一种关系型数据库应用软件,而SQL(Structured Query Language)是一种针对关系型数据库管理使用的结构化查询语言。简单来说,MySQL是软件,SQL是语言。

SQL语言的特点

SQL是结构化查询语言(structured query language)的缩写,是专门用来与数据库进行通信的语言。

1.SQL不是某个特定的数据库专用语言,几乎所有的DBMS(数据库管理软件)都支持SQL
2. SQL简单易学,需要学习的关键词很少
3. SQL可以进行非常复杂和高级的数据库操作

SQL入门

MySQL三要素

表(table): 某种特定类型数据的结构化清单。
列(column): 表中的一个字段。所有表都有一列或多列组成。每一列都有对应的数据类型。
行(row): 表中的一个记录。

主键: 主键(primary key)一列(或一组列),其值能唯一区分表中的每一行。表中的每一行都应该有可以唯一标识自己的一列。表中的任何列都可以作为主键,但必须满足以下条件:
任意两行都不具有相同的主键
每个航都必须具有一个主键

use关键词

use+数据库名称: 表示接下来要使用的数据库,如果不指定,接下来的操作将在所有的数据库进行搜索。

show database: 展示数据库相关信息。

show tables: 展示当前所在数据库的所有表格。

show columns from table: 展示table表格中的所有列。

检索数据

1.检索列:
(1)检索单个列:select col1 from table
(2)检索多个列:select col1,col2 from table
(3)检索全部列:select * from database . table(推荐此种方式,但不推荐每次返回全部列)

2.检索不同行
(1)在列名之前使用 distinct 关键词,只返回该列中全部唯一值:select distinct col from table
(2)不能部分使用 distinct,它会作用在全部列上,如:select distinct col1,col2 from table,会作用在 col1和 col2 中,返回 col1 和 col2 都不重复的值;不能只作用于其中一列。
(3)distinct 必须在所有列名的前面。

3.限制结果
当数据量比较大的时候,选择限制返回行数来进行查看数据,这样可以节约时间和资源。
(1)limit 关键字确保只返回有限的行数:select col1 from table limit 10(返回不多于10行)
(2)select col1 from table limit 10,5(10为开始位置,5为行数)

4.注意细节
(1)结果是无序的,返回的是数据被添加到表的顺序。
(2)使用""结束SQL语句。
(3)SQL不区分大小写;默认对表的名字大小写敏感。
(4)所有空格被忽略。

数据排序

1.排序数据
(1)使用 order by 对数据进行排序;select col1 from table order by col1
(2)不一定需要显示的列进行排序; select col1 from table order by col2
(3)默认按照升序排序。

2.多列排序
(1)列名之间用英文逗号隔开, select * from table order by col1,col2
(2)排序将会按照先按照 col1 排序,如果 col1 相同,再按照 col2 排序

3.指定排序方向
(1)默认是升序排列(A-Z,1-9)
(2)指定关键词DESC降序,ASC升序
(3)与 distinct 关键字不同, distinct 关键字会作用于选择出的全部的列,但 desc 和 asc 关键字只作用于特定列,如果需要指定多个列,必须每列都指定关键字,关键字要放在列名后面 ; select * from table order by col1 desc,col2 asc

数据过滤

1.操作符:
=(等于),<>、!=(不等于),>(大于),<(小于),>=(大于等于),<=(小于等于)

2.使用where语句
(1)使用 where 关键词对数据进行过滤。对数据进行条件过滤的 where 语句,必须在from子句之后给出。
(2)检查单个值:select col1,col2 from database . table where col >100;
(3)不匹配检查:select * from database . table where col <> ‘big’ (文本数据必须用单引号或双引号括起来)
(4)范围检查:select * from database . table where col between 1 and 10
(5)空值检查:select * from database . table where col is null

3.组合where子句
(1)AND:组合多个条件语句;同时满足。 select * from database . table where col1 >= 10 and col2 <100
(2)OR:匹配任一条件;select * from database . table where col1 >= 10 or col2 <100
(3)计算次序:SQL优先处理AND语句,后处理OR语句,使用圆括号自定义处理顺序

4.IN和NOT操作符
(1)IN 操作符用来指定条件范围,范围内的每一条都可以进行匹配,在圆括号中用逗号分隔值。select * from world . City where CountryCode in (‘ARG’,‘CHN’) 相当于 select * from world . City where countrycode = ‘CHN’ or countrycode = ‘ARG’
(2)NOT IN 操作符用于否定全部的过滤子句,作用于 IN 关键词相同。

通配符

1.什么是通配符
通配符(wildcard)是用来匹配值的一部分的特殊字符。在搜索子句中使用通配符必须使用like操作符。

2.下划线_通配符 (仅代表一个字符,不区分大小写,对空格敏感)
(1)只匹配单个字符
(2)‘_abc’ 以 abc 结尾,开头只有一个长度的任意字符
(3)例如: select * from world . City where Name like ‘_tt’

3.百分号%通配符(字符数量不限,不区分大小写,对空格敏感)
(1)’abc%’ 以 abc 开头,任意字符结尾的数据
(2)‘%abc’ 以 abc 结尾,任意字符开头的数据
(3)‘%abc%’ 以任意字符开头和结尾,中间包含 abc 的数据
(4)例如: select * from world . City where Name like ‘AL%’

4.注意
(1)通配符搜索比较慢,尽可能使用其他操作符。
(2)尽可能不要把通配符置于搜索的开始之处,先用其他条件筛选掉部分数据,再使用通配符搜索可以提高搜索速度。
(3)注意尾部的空格,空格也是字符。
(4)注意 null 值。

数据处理函数

SQL支持函数,但是函数却不像SQL具有很强的可移植性,因为不同厂商的DBMS会指定不同的特殊函数。以下以MySQL为例。

1.文本处理函数
用于处理文本的函数,对文本数据进行提取转换操作。
(1)Rtrim() :删除字符串的右边空格
(2)Ltrim() :删除字符串的左边空格
(3)Length() :计算字符串长度
(4)Upper() :字符串大写
(5)Lower() :字符串小写
(6)Substring() :字符串子集
(7)Left() :返回字符串最左边的n个字符
举例:
(1)select id , name , ltrim(name) as newname , length(name) as name_len from world . City;:对处理的文本进行重命名,形成新的表格。
(2)select substring(Name,1,2) from world . City:从Name列中第一个字符开始,选取两个字符
(3)select Left(Name,2) from world . City:从Name列中最左边字符开始,选取两个字符

2.数值计算函数
用于处理数值类型数据的函数,几乎所有的DMBS数值函数都是一样的。

3.时间日期函数
时间与日期函数采用了特殊的数据类型和特殊格式存储。MySQL中最常用的数据格式是:yyyy-
mm-dd。
(1)Curdate():返回当前日期
(2)Curtime():返回当前时间
(3)Date():返回日期时间的日期部分
(4)Datediff():计算两个日期差
(5)Day():返回天数
(6)Dayofweek():返回星期几(默认周日为每周第一天)
(7)Hour():返回小时
(8)Minute():返回分钟
(9)Month():返回月份
(10)Year():返回年份

汇总函数

1.聚合函数
(1)运行在行组上,针对多行计算和返回单个值的函数
(2)常用函数:avg、count、max、min、sum
(3)例如:select avg(population) as avg_pop, count(population) as count_pop,sum(population) as sum_pop, max(population) as max_pop,min(population) as min_pop from world . City;

2.聚集不同值
(1)对所有行执行计算操作
(2)指定distinct参数,先去重在进行聚合操作。
例如:
select sum(distinct population) from world . City; 先对population列去重,然后再求和,其他聚合
函数同理。

3.null值
聚合函数会忽略null值(如求平均数时,分子和分母均会忽略null值),但是count函数特殊,count(*)不会忽略(意味着计算全部列的条目数,即 null 值也算作一个数量),指定列的时候忽略。

4.组合聚合函数
select count(*) as num_items, min(col1) as min_col, sum(col2) as sum_col2 from table