使用工具:Navicat mysql官网
LIKE、NOT LIKE配合通配符%( 匹配任意数量的字符,甚至零个字符)和_ (完全匹配一个字符)一般用来做模糊查询
-- 比较时不区分大小写,1表示true 0表示false,不使用%时类似于=比较 SELECT 'all' like 'ALL' -- 1 select 'all' LIKE 'ALL_' -- 0 select 'allk' LIKE 'ALL_' -- 1 select 'all' LIKE '%all%' -- 1 select 'allk' LIKE '%all_%' -- 1 select 'allk' NOT LIKE '%all_%' -- 0函数匹配时不区分字母大小写,也可以使用正则表达式进行模糊查询
SELECT 'a' REGEXP '^[a-d]' -- 1 SELECT name FROM person_tbl WHERE name REGEXP '^st' -- 匹配名字以st开头的创建库、表、视图、事件、索引、触发器
CREATE INDEX index_phone ON userinfo(phone) -- 创建索引更改数据库特征、存储过程、更改表及字段…
添加新列,使用ADD
AlTER TABLE userinfo ADD column salary VARCHAR(256) null修改某一列,列名不改变,用MODIFY
AlTER TABLE userinfo MODIFY column salary int(10)修改某一列,列名要改变,用CHANGE
AlTER TABLE userinfo CHANGE column salary userSalary INT(12)所有能CREATE的都可以使用DROP删除
DROP INDEX index_phone ON userinfo按某一个字段升序(ASC)/降序(DESC)方式来进行排序,默认升序
SELECT * FROM userinfo ORDER BY AGE desc根据一个或多个列对结果集进行分组,在分组的列上我们可以使用 COUNT, SUM, AVG,等聚合函数
select age,count(age) from userinfo GROUP BY agehaving子句可以让我们筛选成分组后的数据,一般跟在group by之后,执行记录组选择的一部分来工作的,可以配合聚合函数使用
select sum(score) from student where sex='man' group by name having sum(score)>210;删除结果集中重复的数据
select DISTINCT age FROM userinfo#####8、UNION 和 UNION ALL 用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中,UNION不包括重复数据,而UNION ALL包含所有数据 注意:union前后连接的查询列数要相同,且列与列位置要对应
SELECT webName, loginTime FROM Websites UNION SELECT appName, loginTime FROM apps多表联查
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录,取交集 LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。 RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录
select a.id, a.userName, b.job, b.salary FROM userinfo a inner JOIN job b ON a.id = b.id -- inner join等同于FROM userinfo a , job b 从笛卡尔积(a*b)的结果集再去筛选,效率低下 select a.id, a.userName, b.job, b.salary FROM userinfo a , job b where a.id = b.id -- 以左表为主表,显示左表中包含的所有查询字段,右表字段在左表中无对应关系的显示null select a.id, a.userName, b.job, b.salary FROM userinfo a LEFT JOIN job b ON a.id = b.id -- 与左联查相反 select a.id, a.userName, b.job, b.salary FROM userinfo a RIGHT JOIN job b ON a.id = b.id可以配合联查关键字使用,去掉为NULL的数据
-- 左联查的结果中去掉job为NULL的数据 select a.id, a.userName, b.job, b.salary FROM userinfo a LEFT JOIN job b ON a.id = b.id where job IS NOT NULL常用于查询结果集的几行数据、分页等等
-- limit后给定1个参数表示获取前几行数据 SELECT * FROM loop_test limit 5; -- 等价于 limit 0,5 -- limit后2个参数,limit x y,表示返回从x后的y行数据,常用作分页查询 SELECT * FROM loop_test limit 5, 3; -- 返回6,7,8三行数据Mysql5.7及以上支持
Mysql 5.7 支持两种Generated Column(表示该字段依赖另一字段值),即Virtual Generated Column和Stored Generated Column,前者只将Generated Column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将Generated Column持久化到磁盘上,而不是每次读取的时候计算所得。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与Virtual Column相比并没有优势,因此,不指定Generated Column的类型,默认是Virtual Column
ALTER TABLE t1 ADD COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED(1)from (3) join (2) on (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum… (7)having (8) select (9) distinct (10) order by (11) limit