三、表内容操作
1、增
语法:insert into 表 (列名,列名...) values (值,值,值...)
# 插入单条数据
insert into 表 (列名,列名...) values (值,值,值...)
# 插入多条数据
insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)
# 插入另一条语句的查询结果
insert into 表 (列名,列名...) select 列名,列名... from 表
复制
2、删
语法:delete from 表
delete from 表;
delete from 表 where id=1;
复制
3、改
语法:update 表 set name = 'nick' where id>1
update 表 set name = 'nick' where id>1
复制
4、查
语法:
select * from 表
SELECT DISTINCT 列名称 FROM 表名称 ; (去重)
select * from 表
select * from 表 where id > 1
select nid,name,gender as gg from 表 where id > 1
# as 做别名
复制
5、条件
语法:select * from 表 where id > 1
select * from 表 where id > 1 and name != 'nick' and num = 12; # 多个条件
select * from 表 where id between 5 and 16; # id在5到16之间
select * from 表 where id in (11,22,33); # id在元祖中
select * from 表 where id not in (11,22,33); # id不在元祖中
select * from 表 where id in (select nid from 表); # id在查询结果中
复制
6、通配符
语法:select * from 表 where name like '_n%'
select * from 表 where name like 'ni%' # ni开头的所有(多个字符串)
select * from 表 where name like 's_' # s开头的所有(一个字符)
复制
7、限制
语法:select * from 表 limit 9,5;
select * from 表 limit 5; # 前5行
select * from 表 limit 9,5; # 从第9行开始的5行
select * from 表 limit 5 offset 9 # 从第9行开始的5行
复制
8、排序
语法:select * from 表 order by 列1 desc,列2 asc
select * from 表 order by 列 asc # 根据 “列” 从小到大排列
select * from 表 order by 列 desc # 根据 “列” 从大到小排列
select * from 表 order by 列1 desc,列2 asc # 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
复制
9、分组
语法:select num from 表 group by num
select num from 表 group by num # 根据num分组
select num,nid from 表 group by num,nid # 根据num和nid分组
select num,nid from 表 where nid > 10 group by num,nid order nid desc
select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid # 内置函数
select num from 表 group by num having max(id) > 10 # 前面计算的结果交由后面处理
注:group by 必须在where之后,order by之前
复制
count(*)、count(1) # 表示个数
sum(score) # 表示和
max(score) # 表示最大数
min(score) # 表示最小数
having # 要用前面处理结果是用having。
复制
10、连表
语法:inner join . on、left join . on、right join . on
无对应关系则不显示
select A.num, A.name, B.name
from A,B
Where A.nid = B.nid
无对应关系则不显示
select A.num, A.name, B.name
from A inner join B
on A.nid = B.nid
A表所有显示,如果B中无对应关系,则值为null
select A.num, A.name, B.name
from A left join B
on A.nid = B.nid
B表所有显示,如果B中无对应关系,则值为null
select A.num, A.name, B.name
from A right join B
on A.nid = B.nid
复制
11、组合
语法:union、union all
组合,自动处理重合
select nickname
from A
union
select name
from B
组合,不处理重合
select nickname
from A
union all
select name
from B
复制
查询表数据
1> 命令语法:select<字段1,字段2,…>from<表名>where<表达式>
2> 查询所有
mysql> select * from student;
+----+-----------------+------+--------+
| id | name | age | dept |
+----+-----------------+-------+--------+
| 2 | oldsuo | 0 | NULL |
| 3 | kangknag | 0 | NULL |
| 4 | kangkang | 0 | NULL |
+----+-----------------+-------+--------+
3 rows in set (0.00 sec)
3> 查询某列。不用*,查询的列列出来。
mysql> select id,name from student;
+----+----------------+
| id | name |
+----+----------------+
| 2 | oldsuo |
| 3 | kangknag |
| 4 | kangkang |
+----+-----------------+
3 rows in set (0.00 sec)
4> 指定条件查询
mysql> select id,name from student where name='oldsuo' and id=2;
+----+--------------+
| id | name |
+----+---------------+
| 2 | oldsuo |
+----+----------------+
1 row in set (0.00 sec)
mysql> select id,name from student where name='oldsuo' or id=3;
+----+----------+
| id | name |
+----+----------+
| 2 | oldsuo |
| 3 | kangknag |
+----+----------+
2 rows in set (0.03 sec)
#升序
mysql> select id,name from student order by id asc;
+----+----------+
| id | name |
+----+----------+
| 2 | oldsuo |
| 3 | kangknag |
| 4 | kangkang |
+----+----------+
3 rows in set (0.00 sec)
#倒叙
mysql> select id,name from student order by id desc;
+----+----------+
| id | name |
+----+----------+
| 4 | kangkang |
| 3 | kangknag |
| 2 | oldsuo |
+----+----------+
3 rows in set (0.00 sec)
复制
表中插入数据
1> 插入单个数据,student为表的名称。
mysql> insert into student(id,name) values(1,'nick');
Query OK, 1 row affected (0.02 sec)
mysql> select * from student;
+----+--------------+------+--------+
| id | name | age | dept |
+----+--------------+------+--------+
| 1 | nick | 0 | NULL |
+----+--------------+------+---------+
1 row in set (0.00 sec)
3> 批量插入数据,student为表的名称。
mysql> INSERT INTO student(id,name) values(2,'oldsuo'),(3,'kangknag'),(4,'kangkang');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student;
+----+-----------------+------+------+
| id | name | age | dept |
+----+-----------------+------+------+
| 1 | nick | 0 | NULL |
| 2 | oldsuo | 0 | NULL |
| 3 | kangknag | 0 | NULL |
| 4 | kangknag | 0 | NULL |
+----+-----------------+------+--------+
3 rows in set (0.00 sec)
复制
表中删除数据
1> 删除所有数据,student为表的名称。
mysql> delete from student;
Query OK, 8 rows affected (0.01 sec)
mysql> select * from student;
Empty set (0.00 sec)
2> 删除表中的某行或某些
mysql> delete from student where id=4;
Query OK, 1 row affected (0.00 sec)
mysql> delete from student where id>2;
Query OK, 1 row affected (0.00 sec)
mysql> delete from student where name='oldsuo';
Query OK, 1 row affected (0.00 sec)
3> 直接清空某张表
mysql> truncate table student;
Query OK, 0 rows affected (0.00 sec)
复制
四、其它命令
1、查看建表语句
show create table 表名\G
mysql> use nick_defailt
Database changed
mysql> create table student (
id int(4) not null,
name char(20) not null,
age tinyint(2) NOT NULL default '0',
dept varchar(16) default NULL
);
Query OK, 0 rows affected (0.05 sec)
mysql> show create table student\G #查看建表语句
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` ( #CREATE TABLE创建表的固定关键字,student为表名。
`id` int(4) NOT NULL, #学号列,数字类型,长度为4,不为空值。
`name` char(20) NOT NULL, #名字列,定长字符类型,长度20,不为空值。
`age` tinyint(2) NOT NULL DEFAULT '0', #年龄列,很小的数字类型,长度为2不为空,默认0。
`dept` varchar(16) DEFAULT NULL #系别列,变长字符类型,长度16,默认为空。
) ENGINE=MyISAM DEFAULT CHARSET=latin1 #引擎和字符集,引擎默认InnoDB,字符集lantin1。
1 row in set (0.00 sec)
复制
2、查看表结构
desc 表名;
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(4) | NO | | NULL | |
| name | char(20) | NO | | NULL | |
| age | tinyint(2) | NO | | 0 | |
| dept | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)
复制
3、查看是否走索引
explain select * from 表名 where name ='nick' \G
用此命令查看是否sql语句是否还有优化的余地
mysql> explain select * from student where name ='student' \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: student
type: ref #有
possible_keys: index_name
key: index_name #表示有,详细见下文
key_len: 20
ref: const
rows: 1 #检索了几行
Extra: Using where
1 row in set (0.00 sec)
复制
4、查询时间戳和日期的转换
MySQL提供了两个函数:
from_unixtime(time_stamp) -> 将时间戳转换为日期
unix_timestamp(date) -> 将指定的日期或者日期字符串转换为时间戳
SELECT from_unixtime(duedate/1000) duedate FROM organ WHERE refer='suoning';
复制
文章转载自Linux Windows server学习交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3359次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
911次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
536次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
461次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
383次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
361次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
306次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
300次阅读
2025-05-06 14:40:00
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
299次阅读
2025-04-28 11:01:25
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
292次阅读
2025-04-30 12:17:54