MySQL1:基本语法
发布时间:2022-09-24 14:54:19 所属栏目:MySql教程 来源:
导读: 由于这里MySQL主要应对数据分析岗,所以只复习查询相关语句,有关锁、游标和函数等的相关内容暂不复习。
1.基本介绍
SQL:structured query language,结构化查询语言;数据的所有存储、检索、管
1.基本介绍
SQL:structured query language,结构化查询语言;数据的所有存储、检索、管
|
由于这里MySQL主要应对数据分析岗,所以只复习查询相关语句,有关锁、游标和函数等的相关内容暂不复习。 1.基本介绍 SQL:structured query language,结构化查询语言;数据的所有存储、检索、管理和处理,实际是由数据库软件DNMS,即数据库管理系统完成的,MySQL也是一种数据库软件。DBMS分为两类:一种是基于共享文件系统的DBMS,包括microsoft access和filemaker等,适用于桌面用途,不适用于高端或更关键的应用。另一种是基于客户机-服务器的DBMS,如MYSQL,Oracle和Microsoft SQL server等,服务器部分是负责所有数据访问和处理的一个软件,一般运行在数据库服务器上,服务器软件为MySQL DBMS;客户机是与用户打交道的软件,客户机可以是MySQL提供的工具、脚本语言、程序开发语言等。 常用客户机有: MySQL命令行实用程序:用于快速测试和执行脚本;命令输入在mysql>之后,命令用;或\g结束,quit或exit退出程序。MySQL administrator:图形交互客户机,简化mysql服务器的管理;MySQL query brower:图形交互客户机mysql语句,用来编写和执行MySQL命令; 连接到MySQL,需要主机名(本地MySQL服务器为localhost)、端口(一般默认是3306,可修改)、合法的用户名和用户口令(密码)。 2.关键字和正则表达式 REGEXP关键字用来匹配文本的特殊的串。若匹配的文本在列值中出现,REGEXP会返回响应的行,但是LIKE不会返回相应的行,除非使用通配符。 3.计算、汇总、分组数据 计算字段并不实际存在于数据库表中,计算字段是运行时在SELECT语句中创建的。 分组数据 分组允许把数据分为多个逻辑组,以便能够对每个组进行聚集计算; (1).创建分组:分组是在SELECT语句的GROUP BY字句中建立的; SELECT A COUNT(*) AS B FROM c GROUP BY A; GROUP BY字句提示MySQL分组数据,然后是对每个组而不是整个结果集来进行聚集; 注意: GROUP BY字句可以包含任意数目的列;若GROUP BY字句中嵌套了分组,数据将在最后规定的分组上进行汇总;GROUP BY字句列出的每个列都必须是检索列或有效表达式,不能使用别名;除聚集计算语句,SELECT语句中每个列都必须在GROUP BY字句中给出;分组中有NULL值,则NULL将作为一个分组返回,有多行NULL值则分为一组;GROUP BY字句必须出现在WHERE字句之后,ORDER BY字句之前。 (2).过滤分组 使用HAVING字句过滤分组,类似于WHERE;但WHERE过滤行,HAVING过滤分组; SELECT A,COUNT(*) AS B FROM c GROUP BY A HAVING COUNT(*) >= 2; SELECT A,COUNT(*) AS B FROM c WHERE d >= 10 GROUP BY A HAVING COUNT(*) >= 2; (3).选择分组 case when可对已知数据按照另外一种方式进行分组分析,也可用一个SQL语句完成不同条件的分组。 a.case函数 CASE 列名 WHEN '……' THEN '……' WHEN '……' THEN '……' …… ELSE '其他' END b.case搜索函数 CASE WHEN 列名='……' THEN '……' WHEN 列名='……' THEN '……' …… ELSE '其他' END ##### SELECT mdate, team1, SUM(CASE WHEN teamid=team1 THEN 1 ELSE 0 END) AS score1, team2, SUM(CASE WHEN teamid=team2 THEN 1 ELSE 0 END) AS score2 FROM game JOIN goal ON matchid=id GROUP BY mdate,matchid,team1,team2 ORDER BY mdate,matchid,team1,team2; (4).分组和排序 GROUP BY与ORDER BY经常完成相同的工作,但是两者是非常不同的。 GROUP BY:分组行,但输出可能不是分组的顺序;只可能使用选择列或是表达式列,必须使用每个选择列表达式;与聚集函数一起使用列,则必须使用; ORDER BY:排序产生的输出;任意列都可以使用;不一定需要使用; SELECT A,COUNT(*) AS B FROM c GROUP BY A HAVING COUNT(*) >= 2; SELECT A,COUNT(*) AS B FROM c GROUP BY A HAVING COUNT(*) >= 2 ORDER BY B; 4.子查询和联结 任何SQL都是查询,从单个数据库中检索数据的单条语句;SQL允许创建子查询,即嵌套在其他查询中的查询。 规定要联结的所有表以及它们如何关联,即可创建联结。 5.文本处理函数 这里就放几个会见到的函数; 6.插入更新删除数据 (1)创建表 (1)一个是使用具有交互式创建和管理表的工具;另一种是表可直接用MySQL语句操纵; CREATE TABLE语句创建表:加新表的名字,表列的名字和定义用逗号分隔; CREATE TABLE customers ( id int NOT NULL AUTO_INCREMENT, name char(50) NOT NULL, address char(50) NULL, city char(50) NULL, state char(5) NULL, zip char(10) NULL, country char(50) NULL, contact char(50) NULL, email char(255) NULL, PRIMARY KEY (id) )ENGINE=InnoDB; 表定义括在圆括号中,各列之间用逗号分隔。每列的定义以列名开始,后跟列的数据类型;表的主键可以在创建表时用PRAMARY KEY关键字指定; NULL值:没有值或缺值;允许NULL值的列也允许在插入行时不给出该列的值;不允许NULL值的列不接受该列没有值的行,含有关键字NOT NULL,会阻止插入没有值的列,返回错误插入失败; 主键:主键值必须唯一,即主键使用单个列,值必须唯一,若使用多个列则这些列的组合值必须唯一;创建多个列组成的主键,用逗号分隔开列表给出各列名:PRIMARY KEY (id,name); AUTO_INCREMENT:使用的最简单的编号是下一个编号;即大于当前最大编号的编号,如10006,下一编号为10007;AUTO_INCREMENT告知MySQL,本列每当增加一行时自动增量,给该列赋予下一个可用的值。每个表只允许一个AUTO_INCREMENT列,而且必须被索引; 默认值:DEFAULT关键字指定;mysql允许在插入行时没有给出值的情况下指定使用默认值;quanity int NOT NULL DEFAULT 1,默认值为1; 引擎类型:MySQL有一个具体管理和处理数据的内部引擎,在使用CREATE TABLE语句时,该引擎具体创建表,而在使用SELECT语句或进行其他数据库处理时,该引擎在内部处理请求;MySQL具有多种引擎,引擎隐藏在MySQL服务器内,全都能执行命令;若省略ENGINE=语句,则使用默认引擎(一般是MyISAM); Innodb是一个可靠的事务处理引擎,不支持全文本搜索;MEMORY在功能上等同于MyISAM,但由于数据存储在内存中(不是磁盘),速度很快(适合于临时表)MyISAM是一个性能极高的引擎,支持全文本搜索,不支持事务处理; (2)更新表 ALTER TABLE语句:更新表定义;但是表存储数据后后一般不更改;更改表结构需要给出要更改的表名和列表; ALTER TABLE customers ADD phone CHAR(20); ALTER TABLE customers DROP COLUMN phone; ALTER TABLE还可用来定义外键: ALTER TABLE items ADD CONSTRAINT fk_items_orders FOREIGN KEY (num) REFERENCES orders (num); (3)删除表 删除表:DROP TABLE customers; (4)重命名表 RENAME TABLE语句:重命名表; RENAME TABLE a_customers TO customers,a_vendors TO vendors; ALTER TABLE titles_test RENAME TO titles_2017;//重命名表名 (编辑:我爱制作网_沈阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330576号