手记

Mysql基础知识整理

创建连接

主机名----如果连接到本机则是 localhost

端口号----默认是3306

选择数据库

使用use 关键词----use database(数据库名称);

查询数据库

show database;

查询表

show tables;

查询列信息

show columns from 表名;(它对每个列返回一行信息)

服务器状态查询

show status; (显示服务器状态信息)

显示其他信息

show grants; (用来显示 授予 用户的安全权限)

show errors; show warnings; (显示服务器错误或警告信息)

检索数据

sql 不区分大小写 一般关键词大写 列和表名小写

查询单个列 多个列

select 列名(*) from 表名;(返回所有行)

查询不想要值的列( 去重 distinct )

select distinct 列名 from 表名;(告诉mysql 只返回唯一的 列)

不能部分使用 distinct 如果后跟多个列则都去重

Limit 限制结果

select 列 from 表 limit 5; (返回不多于5条)

select 列 from 表 limit 5,5; (返回第二个5条 第一个5表示跳过5条)

使用完全限定名称查询

select 表名.列名 from 数据库名.表名;

排序检索数据

排序数据(order by 默认升序 使用 desc 降序排列)

select 列 from 表 order by 列;

select 列1,列2,列2 from 表 order by 列1 desc,列2;(列1 降序,列2升序)

如果多个需要降序 在各个列后面添加desc

如果使用order by 和 Limit 结合 要保证 order by 位于from 或 where后 limie位于order by 后

过滤数据 where

MySQL在执行匹配时是不区分大小写的 所以where name="aa"和where name="AA"是相同的

between 两者之间 (where id between 5 AND 10; 包括开始和结尾)

任何时候where 后使用OR 或者AND 都应该使用括号

一般使用IN操作符 原因它比OR操作符要快 直白

通配符 LIKE

百分号% 表示任意字符出现任意次数

下划线 _ 表示匹配单个字符

缺点:搜索速度慢 除非必须使用

正则表达式

使用 REGEXP 关键词替代 like 告诉MySQL 我后面所跟为正则表达式

select name where id REGEXP “.000”; 其中.表示匹配任一字符

匹配过程不区分大小写 如果需要可使用BINARY

where name REGEXP BINARY “Jet”

where id REGEXP “1000|2000|3000” 搜索多个串之一

可使用 [123] 它和 [1|2|3] 一样

匹配范围 [1-5] [a-z]

匹配特殊字符 使用双斜杠\ \-

创建计算字段

拼接字段

将两值拼接构成单个值 可使用Concat() 函数将俩列拼接

Concat() 需要一个或多个指定的串 各个串之间用逗号隔开

例子:select Concat(name, ‘(’ , Rtrim(id), ‘)’ ) from 表名;

其中 Rtrim 表示删除数据右侧空格

也可以使用别名关键词 AS

计算字段

select 3*2; 返回6 select NOW(); 返回当前时间

select 列1*列2 As a from 表名;

数据处理函数

文本处理函数

Upper(列名) 转换大写

发音搜索 Soundex

例子:where Soundex(name) = Soundex(“Li hua”);

日期处理函数

不管是插入还是查询日期必须为 yyyy-mm-dd

DateDiff() 返回两个时间的日期之差

AddDate() 增加一个日期

Time() 返回一个时间的时间部分

Date() 返回一个时间的日期部分

聚集函数

AVG() 函数 返回某列的平均值

select AVG( 列 ) AS 别名 from 表名

也可以为select AVG( distinct 列 ) AS 别名 from 表名 where…(<u>去重</u>)

Count() 函数 有两种使用方式

使用Count(*) 对表中行的数目进行计数 不管表列中包含的是null还是非null值

select count(*) from 表; 返回所有行不管行中各列有什么值

使用Count(列) 对特定列中的具有值的行进行计数 忽略null值

select count(email) from 表; 对表中有email的客户进行计数

MAX() 函数返回指定列中最大值包括日期

MIN() 函数返回指定列中最小值包括日期

Sum() 返回指定列值的和

分组数据

使用group by 关键词 位于where之后 order by 之前

一般在group by 之后跟having 或者跟order by 保证数据正确

过滤分组 having

having 和 where区别 having 过滤分组 where过滤行

having 数据分组后过滤 where 分组前过滤

select id,count(*) AS aa from 表 GROUP BY id;

联结表

外键

为某个表中的一列,它包含另一张表的主键值

可伸缩性

能够适应不断增加的工作量而不失败,设计良好的数据库或应用程序称之为可伸缩性好

创建联结

规定要联结的所有表以及他们如何关联即可

例子:select v.name,p.name,p.price from v,p where <u>v.id=p.id</u> order by v.name,p.name;

以上查询两张表 from两张表 最后把他们的联结关系对应,然后进行排序

联结条件的时候要使用完全限定名

笛卡尔积

由没有联结条件的表关系返回的结果为笛卡尔积,检索出的行的数目由两张表的乘积

所以不要忘记where子句

内部联结

目前为止所用的是等值联结 也称为内部联结,它基于两张表之间的相等测试

例子:select v.name, p.name, p.price from v INNER JOIN p ON v.id = p.id;

传递给ON 的条件和 where 条件相同

<u>一般使用 内部联结较多 方便程序员不忘记联结条件</u>

联结多个表

首先列出所有表,然后定义表之间的关系

例子:select a.name, b.name, c.name from a, b, c where a.id = b.id AND b.id = c.id;

性能:不要联结没有不必要的表

创建高级联结

使用表别名-----AS

缩短SQL语句

允许在单条select语句中多次使用相同的表

例子:select student.name, teacher.name, person.name from student AS s,

teacher AS t, person AS p where s.id = t.id AND t.id = p.id;

例子二–应用检索语句:<u><还可以应用 ORDER BY , 语句其他部分></u>

select s.name, t.name, p.name from student AS s,

teacher AS t, person AS p where s.id = t.id AND t.id = p.id;

自联结

如果你发现某物品(其ID 为DTNTR)存在问题,因此想知道生产该物品的供应商生产的其他

物品是否存在问题------首先要找到生产该物品的厂家,然后再找出其他物品

select prod_id , prod_name FROM products WHERE vend_id =

(select vend_id FROM products WHERE prod_id = “DTNTR”);

select p1.prod_id , p1.prod_name FROM products AS p1, products AS p2

WHERE p1.prod_id = p2.prod_id AND p2.prod_id = “DTNTR”;

外部链接

例子:select c.id , o.num FROM customers AS c LEFT OUTER JOIN orders AS o

ON c.id = o.id;

在使用OUTER JOIN必须使用 LEFT 或者 RIGHT 指定包括所有行的表


1人推荐
随时随地看视频
慕课网APP