MySQL 增, 删, 改, 插
全表查询表记录
格式 1:select 字段 1,... 字段 N from 库名. 表名;
格式 2:select 字段 1,... 字段 N from 库名. 表名 where 条件表达式;
注意事项:
1. 使用 "*" 可匹配所有字段.
2. 指定表名时, 可采用 库名. 表名 的形式
例:
mysql>create database ku;
mysql>create table ku.lisi(>name char(10) not null,
>gender enum("boy","girl"),
>age int(3) not null
>);
mysql>insert into ku.lisi values("luozixu","boy"23);
mysql>insert into ku.lisi values("wang","girl",25);
mysql>select * from ku.lisi;
mysql>select name,age from ku.lisi where gender="girl";
例:
为指定字段显示别名, name 显示为 "姓名",age 显示为 "年龄"
mysql>select name AS "姓名",age AS "年龄" from ku.lisi;
查询及条件匹配
使用 WHERE 句子引导
1. 适用于更新, 删除, 查询等
2. 只有符合条件的记录才会被操作
常见的匹配条件
1. 检查字段的数值大小
2. 字符串是否匹配
3. 逻辑测试, 范围测试
数值的比较
= 等于
>,>= 大于, 大于或等于
<,<= 小于, 小于或等于
!= 不等于
BETWEEN..AND... 在... 与... 之间
逻辑比较, 多条件组合
OR,AND,! 逻辑或, 逻辑与, 逻辑非
IN..,NOTIN.. 在.. 范围内, 不在.. 范围内
IS NULL 字段的值为空
IS NOT NULL 字段的值不为空
DISTINCT 不显示重复的值
运算操作
+ 加法
- 减法
* 乘法
/ 除法
% 取余法 (求模)
使用模糊查询
基本用法:
-WHERE 字段名 LIKE "通配字串"
- 通配符 "_" 匹配单个字符,"%" 匹配 0-N 个字符
例: 列出 name 字段值以 J 开头或以 Y 结尾的记录
mysql>select * from ku.lisi where name LIKE "J" OR name LIKE "Y";
使用正则表达式
基本用法:
-WHERE 字段名 REGEXP '正则表达式'
例: 列出 name 字段值以 J 开头或以 Y 结尾的记录
mysql>select * from ku.lisi where name regexp '^J|Y$';
where 子查询
使用 where 子查询:
- 把内层查询结果作为外层查询的查询条件
格式 1:select 字段名列表 from 库. 表 A where 条件 (select 字段名列表 from 库. 表 A);
格式 2:select 字段名列表 from 库. 表 A where 条件 (select 字段名列表 from 库. 表 A where 条件);
例: 输出年龄小于平均年龄的学生的姓名和年龄
mysql>select name,age from ku.lisi where age < (select avg(age) from ku.lisi);
格式 3:select 字段名列表 from 库. 表 A where 条件 (select 字段名列表 from 库. 表 B);
格式 4:select 字段名列表 from 库. 表 A where 条件 (select 字段名列表 from 库. 表 B where 条件);
常用的统计函数
avg() 集合的平均数
sum() 对集合中的各参数求和
min() 集合中的最小值
max() 集合中的最大值
count() 记录的个数
例: 输出 ku 库 lisi 表的记录个数, 各个学生年龄总和
计算各学生的平均年级, 最大, 最小的年龄.
mysql>select count(*),sum(age) from ku.lisi;
mysql>select avg(age),max(age) from ku.lisi;
查询结果排序 / 分组
基本用法:
-ORDER BY 字段名 [asc(升序)/desc(降序)]
-GROUP BY 字段名 [HAVING 条件表达式]
-LIMIT N,M 限制显示记录条目数
例:
查询 ku 库 lisi 表, 按年龄排序, 输出前 2 条结果.
mysql>select * from ku.lisi order by age limit 2;
再输出降序排列的前 2 列结果
mysql>select * from ku.lisi order by age desc limit 2;
例:
查询 ku 库 lisi 表, 按性别进行分组, 分别统计 boy,girl 的人数.
mysql>select gender AS "性别",count(*) AS "人数" from ku.lisi group by gender;
insert 插入记录
格式 1:(仅指定部分字段的值)
insert into 库名. 表名 (字段 1, 字段 2,.. 字段 N) values(字段 1 赋的值, 字段 2 赋的值,.... 字段 N 赋的值);
格式 2:(指定每一个字段的值)
insert into 库名. 表名 values(字段 1 赋的值, 字段 2 赋的值,.... 字段 N 赋的值);
注意事项:
1. 字段值要与字段类型相匹配.
2. 对于字符类型的字段, 要用双或单引号括起来.
3. 依次给所有字段赋值时, 字段名可以省略.
4. 只给一部分字段赋值时, 必须明确写出对应的字段名称.
例:
1. 创建库和表结构
mysql>create database ku;
mysql>create table ku.xi(
>name char(10) not null,
>gender enum("boy","girl") default "girl",
>age int(3) not null
>);
2. 插入表记录
mysql > insert into ku.xi(name, age) values("luozixu", 23);
mysql > insert into ku.xi values("lisi", "boy", 25);
3. 查看表记录
mysql>select * from ku.xi;
update 更新记录
格式 1:(更新表内的所有记录)
update 库名. 表名 set 字段 1 = 字段 1 修改的值, 字段 2 = 字段 2 修改的值,... 字段 N = 字段 N 修改的值;
格式 2:(只更新符合条件的部分记录)
update 库名. 表名 set 字段 1 = 字段 1 修改的值, 字段 2 = 字段 2 修改的值,... 字段 N = 字段 N 修改的值 where 条件表达式;
注意事项:
1. 字段值要与字段类型相匹配.
2. 对于字符类型的字段, 要用双或单引号括起来.
3. 若不是用 WHERE 限定条件, 会更新所有记录.
4. 限定条件时, 只更新匹配条件的记录.
例:
1. 将 ku 库 xi 表中的所有人的 age 字段设置为 10.
mysql > update ku.xi set age = 10;
mysql > select * from ku.xi;
2. 将性别为 boy 的人的 age 字段设置为 20.
mysql > update ku.xi set age = 20 where gender = "boy";
mysql > select * from ku.xi;
delete 删除表记录
格式 1:(仅删除符合条件的记录)
delete from 库名. 表名 where 条件表达式;
格式 2:(删除表所有的表记录)
delete from 库名. 表名;
例:
1. 删除 ku 库 xi 表中 age 字段小于 10 的表记录.
mysql > delete from ku.xi where age <= 10;
mysql > select * from ku.xi;
2. 删除表所有的表记录
mysql > delete from ku.xi;
mysql > select * from ku.xi;
多表查询 (又称 连接查询)
1. 将 2 个或 2 个以上的表, 按某个条件连接起来, 从中选取需要的数据.
2. 当多个表中, 存在相同意义的字段 (字段名可以不相同) 时, 可以通过该字段连接起来多个表.
格式 1:select 字段名列表 from 表 a, 表 b;
格式 2:select 字段名列表 from 表 a, 表 b where 条件;
以上格式查询结果叫笛卡尔集, 显示查询结果的总条目是 (表 a 的记录 * 表 b 的记录数)
例:
mysql>select * from ku.user,ku.user2;
mysql>select * from ku.user,ku.user2 where ku.user2.shell != ku.user.shell and ku.usr.uid<100;
内连接查询 (只显示与查询条件匹配的记录)
格式: select 字段名列表 from 表 a, 表 b;
外连接查询
1. 左连接查询 (以左表记录为主)
2. 右连接查询 (以右表记录为主)
左连接查询
格式: select 字段名列表 from 表 a left join 表 b on 条件表达式;
右连接查询
格式: select 字段名列表 from 表 a right join 表 b on 条件表达式;
表的复制及改名
将源表 xxx 复制为新表 yyy
格式: create table 库名. yyy select * from 库名. xxx;
例:
mysql>create table ku.yy select * from mysql.user;
将指定的查询结果复制为新表 zzz
格式: create table zzz SQL 查询语句;
例:
mysql>create table ku.zz select user,host,password from mysql.user;
复制源表 xxx 的表结构到新表 bbb
格式: create table 库名. bbb select * from 库. xxx where false(错误的记录匹配);
例:
mysql > create table ku.bb select * from mysql.user where false;
mysql > desc ku.bb;
将源表 bbb 的名称改为 www
格式: alter table bbb rename to www;
例:
mysql>alter table ku.bb rename to ku.ww;
来源: http://www.bubuko.com/infodetail-2484010.html