MySQL须记简单语句

查看表的结构:

`SHOW COLUMNS FROM 表名;`简写为`DESC 表名;`

查询表数据去除掉该表中的字段值为重复的时候使用DISTINCT 如下:

SELECT DISTINCT vend_id,prod_price FROM products;
//DISTINCT一般写在select后的,如果他的前面写了字段名,那么会报错
还有就是当他的后面跟了多个字段名的时候,那么相当于把这多个字段名当做一个整体来筛选,也就是只有两个或多个整体中的值一模一样才会筛选掉,否则还是会显示出来

limit

用来限取结果的,有下面这几种情况
1.当后面只写一个数值的时候,表示的是从第一个起去取几个值(包含第一个),
2.如果后面跟两个数值的话:比如 LIMIT 1,1这个表示的是从第一个起取一个值(不包括第一行,取他的下一行的值),这个命令取出的是第二行的值,

limit 3,4;他的详细指令是LIMIT 4 OFFSET 3;就是从第三行取四行数据出来

3.当要取得值的个数超过表中的个数时,他会一直取到表中最后的一个值

limit 6;//但是表中只有5个值,那么他只能取出那5个值

4.排序: ORDER BY

1.ORDER BY 后面可以接一个字段名,也可以接多个字段名,用’,'隔开,当后面接多个的时候,
ORDER BY 字段名1,字段名2…;他会先按字段1排序,如果有相等值的时候,那么她会以第二个字段名来进行排序,依次内推下去.
2.选择排序的顺序,mysql默认是使用ASC升序排列的,自己也可以指定用来降序进行排列:DESC.
在多个列上降序排序 如果想在多个列上进行降序排序, 必须
对每个列指定DESC关键字。
3. ORDER BY子句的位置 在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。使用子句的次序不对将产生错误消息。
4.在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后, 否则将会产生错误

where的字句的部分操作符

1.!= 和<>不等于
2.BETWEEN 数值1 AND 数值2;--数值1和2也包括在内
3.**IS NULL** 判断有没有为null的字符段并选出来  ,NULL不等于""
4.AND 与OR 使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要

过分依赖默认计算次序,即使它确实是你想要的东西也是如此。使用圆括号没有什么坏处,它能消除歧义
如下面的例子:
想要查出价格大于或等于10的名字为为1002或者1003的商品
MySQL须记简单语句_第1张图片
如上图所写并没有达到符合的要求
因此应该加上() 如下图:
在这里插入图片描述
结果如下:
MySQL须记简单语句_第2张图片

IN

功能和OR相似,但是在很多时候比OR方便:
在使用长的合法选项清单时, IN操作符的语法更清楚且更直观。
在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
IN操作符一般比OR操作符清单执行更快。
IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
NOT 用来进行取反,还可以用来进行判断,:
如创建库的时候用来判断需创建的表是否已存在

CREATE DATABASE IF NOT EXISTS 数据库名;

模糊查询

1.LIKE
配合LIKE使用的两个符号号:’%’ 和’_’,
%可以匹配一个或多个,没有也可以,但是匹配不了为NULL的值
则是匹配只能一个,要匹配多个的话则可以选择写多个
例子:
MySQL须记简单语句_第3张图片
使用通配符号的技巧
不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
在确实需要使用通配符时,除非绝对有必要,否则不要把它们用
在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
仔细注意通配符的位置。如果放错地方,可能不会返回想要的数

还有一个可以用来查询的是REGEXP,使用的是正则表达式

字段的操作:聚集函数

1.AVG() 返回某列的平均值
2.COUNT() 返回某列的行数
3.MAX() 返回某列的最大值
4.MIN() 返回某列的最小值
5.SUM() 返回某列值之和
如果有为null话,以上的函数在计算的时候,不会把null的那一行数据算进去,但如果COUNT()函数中用的是星号( *),则不忽略。
有些时候时候AVG()的时候可以配合着DISTINCT使用

连接函数:concat(字符1,字符2);
MySQL须记简单语句_第4张图片

字符段可以用来进行算术计算
如:
MySQL须记简单语句_第5张图片
字段值的操作函数:
1.文本函数处理:
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写
2.处理日期和时间的函数:
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
3.算术函数:
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切
Format(值,取几位),返回一个指定长度的数字

GROUP BY 分组

  1. GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
  2. 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
  3. GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前
  4. 一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。千万
    不要仅依赖GROUP BY排序数据
  5. 使用WITH ROLLUP关键字,可以得到每个分组以
    及每个分组汇总级别(针对每个分组)的值,如下所示:
    在没有使用的时候:
SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id;

MySQL须记简单语句_第6张图片
使用后:

SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id WITH ROLLUP;

MySQL须记简单语句_第7张图片

HAVING

1.WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤
2.HAVING支持所有WHERE操作符 ,但是where后面不能跟聚集函数做判断,having是可以的
如下个例子中count(*)>=2是不可以写在where后的
例子:
MySQL须记简单语句_第8张图片
这条语句中,第一行是使用了聚集函数的基本SELECT,它与前
面的例子很相像。 WHERE子句过滤所有prod_price至少为10的
行。然后按vend_id分组数据, HAVING子句过滤计数为2或2以上的分组。
如果没有WHERE子句,将会多检索出两行(供应商1002,销售的所有产品
价格都在10以下;供应商1001,销售3个产品,但只有一个产品的价格大
于等于10):

SELECT字句的次要顺序:

	子 句 					说 明 							是否必须使用
SELECT			 	要返回的列或表达式	 					是
FROM			 	从中检索数据的表 						仅在从表选择数据时使用
WHERE 				行级过滤									否
GROUP BY 			分组说明 								仅在按组计算聚集时使用
HAVING 				组级过滤									 否
ORDER BY		 	输出排序顺序								 否
LIMIT 				要检索的行数								 否

SELECT 字段名 FROM 表名 WHERE 条件 GROUP BY 分组列名 HAVING 条件 ORDER BY 排序列名 LIMIT 跳过行数, 返回行数;

你可能感兴趣的:(MySQL)