本文共 2964 字,大约阅读时间需要 9 分钟。
1、数据库
- 数据库是一种保存有组织的数据的容器(文件):数据库->表->列、字段->行、记录->主键、外键
- SQL是一种标准,与数据库通信的语言
- MySQL是一种实现SQL语言的DBMS(数据库管理系统)的软件
- 基于客户机--服务器的结构:在客户机是命令行、图形化操作软件、程序语言,在服务器端是DBMS。
2、显示SHOW语句(关键字大写,表、列名小写)
- 连接数据库:先登录到DBMS=>主机名host(域名)、端口port、用户名user、口令pass(密码)mysql -u user -p pass -P port -h host
- 选择数据库:USE 数据库名; (输出,数据库选择成功)Database changed
- 显示数据库列表:SHOW DATABASES;
- 显示数据库内的表的列表:(输入)SHOW TABLES;
- 显示表的列:SHOW COLUMNS FROM 表名 = SHOW 表名; (返回)字段名、数据类型、是否允许NULL、键信息、默认值、其他信息(如auto_increment自动增量)
- 更多SHOW的命令:HELP SHOW;
- 数据库退出:EXIT;或QUIT;
3、检索SELECT语句(FROM字句是必需的)
- 检索列:SELECT 列名1, 列名2, 列名3或者*(通配符) FROM 表名;(返回)原始的、无格式的、未排列的数据
- 返回去除重复的值:SELECT DISTINCT 列名 FROM 表名;(有多个列时,distinct作用于全部数据非部分,即返回的每行数据都不重复)
- 返回指定行数的值:SELECT 列名 FROM 行名 LIMIT 行数 OFFSET 开始行(行从行0开始)/ LIMIT 开始行,行数;
- 完全限定名:数据库.表名,表名.列名
4、排序ORDER BY子句(可选的)
- 默认升序排列:SELECT 列名 FROM 表名 ORDER BY 列名1, 列名2(检索或非检索的列,首先按列1排序,其次按列2);
- 升序ASC,降序DESC,只应用到直接位于其前面的列名:SELECT 列名 FROM 表名 ORDER BY 列名1 DESC, 列名2 DESC;
- A和a默认视为相同,如果需要设置改变这种排序,需要数据库管理员设置;
- 找最高值:SELECT 列名 FROM 表名 ORDER BY 列名 DESC LIMIT 1(注意子句的顺序);
5、过滤行WHERE子句
- 位于ORDER BY子句前面
- WHERE子句匹配操作符:=、<、>、!=、<=等,BETWEEN 低端值 AND 高端值(包括范围值匹配)
- 执行匹配时,不区分大小写
- 空值检查:SELECT 列名 FROM 表名 WHERE 列名 IS NULL;
- NULL值不具有被匹配的能力,即不可以对它使用匹配操作符,以及不返回具有NULL值的行
6、组合过滤
- 组合WHERE子句:逻辑操作符AND和OR
- 默认优先处理AND操作符,使用圆括号分组操作符:SELECT 列名 FROM 表名 WHERE (匹配子句1 OR 匹配子句2) AND 匹配子句3;
- 和OR相同的功能,IN匹配清单里的值,且执行速度一般比OR快,可以包含其他SELECT子句:SELECT 列名 FROM 表名 WHERE 列名 IN (条件值1, 条件值2);
- NOT否定后跟条件,可以对IN、BETWEEN、EXISTS取反:SELECT 列名 FROM 表名 WHERE 列名 NOT IN (条件值1, 条件值2);
7、通配符过滤LIKE谓词
- 匹配特殊字符
- 匹配0个或任意多个字符%,可以出现在任意位置、出现任意次数:SELECT 列名 FROM 表名 WHERE 列名 LIKE '匹配字符串%';
- 匹配单个字符_:SELECT 列名 FROM 表名 WHERE 列名 LIKE '_匹配字符串';
- 不要过度使用,尽量不放在搜索模式开始处
- 转义字符:\
8、正则表达式REGEXP
- LIKE没有通配符相当于等于equal,REGEXP只要包含即会返回:SELECT 列名 FROM 表名 WHERE 列名 REGEXP '匹配字符串';
- 区分大小写:……REGEXP BINARY '匹配字符串';
- 转义,正则表达式使用单个斜杠,MySQL使用两个:\\. 匹配 .
9、计算字段
- 运行时在SELECT语句中创建的,字段与列的意思相同
- 拼接字段(如同拼接字符串),Concat()函数:SELECT Concat(列名1, ' (', 列名2, ')') FROM 表名;
- 删除数据值左右的多余空格:Trim(),RTrim(),LTrim()
- AS关键字赋予别名(导出列):SELECT Concat(列名1, ' (', 列名2, ')') AS 别名 FROM 表名;
- 进行算术计算:SELECT 列1+(加减乘除)列2 AS 别名 FROM 表名;
10、数据处理函数
- 函数的可移植性没有sql语句强
- 文本处理函数:Upper()文本转大写,Soundex()按照发音匹配,Length()返回串的长度,Substring()返回子串的字符
- 日期和时间处理函数:Date()返回日期时间的日期部分,Year()返回年份,Month()返回月份,Time()返回日期时间的时间部分。插入、更新、过滤日期格式首选为yyyy-mm-dd,支持两位数的年份,但四位数的更可靠
- 数值处理函数:Abs()绝对值函数,Rand()随机数
11、聚集函数
- 返回对表中数据的汇总信息
- 求指定列的平均值:AVG(),只用于单个列,忽略NULL
- 求指定列中行的数目:COUNT(),求表的总行数,包括含NULL值的行--SELECT COUNT(*) AS 别名 FROM 表名; COUNT(列名)则会忽略含NULL值的行
- 求指定列的最大、最小值:MAX(),MIN(),会忽略含NULL值的行
- 求指定列的和:SUM(),可以计算单个列的值和,也可以计算多个列上计算表达式后的和(以上聚集均可),忽略NULL
- 聚集不同值:AVG(DISTINCT 列名),DISTINCT只用于指定列名,不能用于*或计算表达式
12、分组数据
- 把数据分成多个逻辑组,以便对每个组进行聚集计算
- 创建分组:SELECT 列名, COUNT(*) AS 别名 FROM 表名 GROUP BY 列名; 对列名进行排序并分组,然后对每个组计算行数目
- GROUP BY:可以包含任意数量的列,最后对所有列一起计算,可以是检索列或者表达式(不能是聚集函数),不能使用别名,SELECT中出现的列(除聚集语句)GROUP BY中也必须出现,出现在WHERE子句后,ORDER BY子句前
- 使用WITH ROLLUP:得到每个分组以及每个分组的汇总级别
- 过滤分组:HAVING支持所有WHERE操作符,SELECT 列名, COUNT(*) AS 别名 FROM 表名 WHERE 行过滤匹配子句 GROUP BY 列名 HAVING COUNT(*) >= 2;
- WHERE在数据分组前过滤,HAVING在数据分组后过滤,WHERE排除的行不包括在分组内
转载地址:http://zirki.baihongyu.com/