MySQL必知必会:单个表查询数据

1、数据库

  1. 数据库是一种保存有组织的数据的容器(文件):数据库->表->列、字段->行、记录->主键、外键
  2. SQL是一种标准,与数据库通信的语言
  3. MySQL是一种实现SQL语言的DBMS(数据库管理系统)的软件
  4. 基于客户机--服务器的结构:在客户机是命令行、图形化操作软件、程序语言,在服务器端是DBMS。

 

2、显示SHOW语句(关键字大写,表、列名小写)

  1. 连接数据库:先登录到DBMS=>主机名host(域名)、端口port、用户名user、口令pass(密码)mysql -u user -p pass -P port -h host
  2. 选择数据库:USE 数据库名; (输出,数据库选择成功)Database changed
  3. 显示数据库列表:SHOW DATABASES;
  4. 显示数据库内的表的列表:(输入)SHOW TABLES;
  5. 显示表的列:SHOW COLUMNS FROM 表名 = SHOW 表名; (返回)字段名、数据类型、是否允许NULL、键信息、默认值、其他信息(如auto_increment自动增量)
  6. 更多SHOW的命令:HELP SHOW;
  7. 数据库退出:EXIT;或QUIT;

 

3、检索SELECT语句(FROM字句是必需的)

  1. 检索列:SELECT 列名1, 列名2, 列名3或者*(通配符) FROM 表名;(返回)原始的、无格式的、未排列的数据
  2. 返回去除重复的值:SELECT DISTINCT 列名 FROM 表名;(有多个列时,distinct作用于全部数据非部分,即返回的每行数据都不重复)
  3. 返回指定行数的值:SELECT 列名 FROM 行名 LIMIT 行数 OFFSET 开始行(行从行0开始)/ LIMIT 开始行,行数;
  4. 完全限定名:数据库.表名,表名.列名

 

4、排序ORDER BY子句(可选的)

  1. 默认升序排列:SELECT 列名 FROM 表名 ORDER BY 列名1, 列名2(检索或非检索的列,首先按列1排序,其次按列2);
  2. 升序ASC,降序DESC,只应用到直接位于其前面的列名:SELECT 列名 FROM 表名 ORDER BY 列名1 DESC, 列名2 DESC;
  3. A和a默认视为相同,如果需要设置改变这种排序,需要数据库管理员设置;
  4. 找最高值:SELECT 列名 FROM 表名 ORDER BY 列名 DESC LIMIT 1(注意子句的顺序);

 

5、过滤行WHERE子句

  1. 位于ORDER BY子句前面
  2. WHERE子句匹配操作符:=、<、>、!=、<=等,BETWEEN 低端值 AND 高端值(包括范围值匹配)
  3. 执行匹配时,不区分大小写
  4. 空值检查:SELECT 列名 FROM 表名 WHERE 列名 IS NULL;
  5. NULL值不具有被匹配的能力,即不可以对它使用匹配操作符,以及不返回具有NULL值的行

 

6、组合过滤

  1. 组合WHERE子句:逻辑操作符AND和OR
  2. 默认优先处理AND操作符,使用圆括号分组操作符:SELECT 列名 FROM 表名 WHERE (匹配子句1 OR 匹配子句2) AND 匹配子句3;
  3. 和OR相同的功能,IN匹配清单里的值,且执行速度一般比OR快,可以包含其他SELECT子句:SELECT 列名 FROM 表名 WHERE 列名 IN (条件值1, 条件值2);
  4. NOT否定后跟条件,可以对IN、BETWEEN、EXISTS取反:SELECT 列名 FROM 表名 WHERE 列名 NOT IN (条件值1, 条件值2);

 

7、通配符过滤LIKE谓词

  1. 匹配特殊字符
  2. 匹配0个或任意多个字符%,可以出现在任意位置、出现任意次数:SELECT 列名 FROM 表名 WHERE 列名 LIKE '匹配字符串%';
  3. 匹配单个字符_:SELECT 列名 FROM 表名 WHERE 列名 LIKE '_匹配字符串';
  4. 不要过度使用,尽量不放在搜索模式开始处
  5. 转义字符:\

 

8、正则表达式REGEXP

  1. LIKE没有通配符相当于等于equal,REGEXP只要包含即会返回:SELECT 列名 FROM 表名 WHERE 列名 REGEXP '匹配字符串';
  2. 区分大小写:……REGEXP BINARY '匹配字符串';
  3. 转义,正则表达式使用单个斜杠,MySQL使用两个:\\. 匹配 .

 

9、计算字段

  1. 运行时在SELECT语句中创建的,字段与列的意思相同
  2. 拼接字段(如同拼接字符串),Concat()函数:SELECT Concat(列名1, ' (', 列名2, ')') FROM 表名;
  3. 删除数据值左右的多余空格:Trim(),RTrim(),LTrim()
  4. AS关键字赋予别名(导出列):SELECT Concat(列名1, ' (', 列名2, ')') AS 别名 FROM 表名;
  5. 进行算术计算:SELECT 列1+(加减乘除)列2 AS 别名 FROM 表名;

 

10、数据处理函数

  1. 函数的可移植性没有sql语句强
  2. 文本处理函数:Upper()文本转大写,Soundex()按照发音匹配,Length()返回串的长度,Substring()返回子串的字符

  3. 日期和时间处理函数:Date()返回日期时间的日期部分,Year()返回年份,Month()返回月份,Time()返回日期时间的时间部分。插入、更新、过滤日期格式首选为yyyy-mm-dd,支持两位数的年份,但四位数的更可靠

  4. 数值处理函数:Abs()绝对值函数,Rand()随机数

 

11、聚集函数

  1. 返回对表中数据的汇总信息
  2. 求指定列的平均值:AVG(),只用于单个列,忽略NULL
  3. 求指定列中行的数目:COUNT(),求表的总行数,包括含NULL值的行--SELECT COUNT(*) AS 别名 FROM 表名; COUNT(列名)则会忽略含NULL值的行
  4. 求指定列的最大、最小值:MAX(),MIN(),会忽略含NULL值的行
  5. 求指定列的和:SUM(),可以计算单个列的值和,也可以计算多个列上计算表达式后的和(以上聚集均可),忽略NULL
  6. 聚集不同值:AVG(DISTINCT 列名),DISTINCT只用于指定列名,不能用于*或计算表达式

 

12、分组数据

  1. 把数据分成多个逻辑组,以便对每个组进行聚集计算
  2. 创建分组:SELECT 列名, COUNT(*) AS 别名 FROM 表名 GROUP BY 列名; 对列名进行排序并分组,然后对每个组计算行数目
  3. GROUP BY:可以包含任意数量的列,最后对所有列一起计算,可以是检索列或者表达式(不能是聚集函数),不能使用别名,SELECT中出现的列(除聚集语句)GROUP BY中也必须出现,出现在WHERE子句后,ORDER BY子句前
  4. 使用WITH ROLLUP:得到每个分组以及每个分组的汇总级别
  5. 过滤分组:HAVING支持所有WHERE操作符,SELECT 列名, COUNT(*) AS 别名 FROM 表名 WHERE 行过滤匹配子句 GROUP BY 列名 HAVING COUNT(*) >= 2;
  6. WHERE在数据分组前过滤,HAVING在数据分组后过滤,WHERE排除的行不包括在分组内

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值