添加数据
格式:insert into 表名(字段列表) values(值列表)
- 标准添加(指定所有字段和值)
insert into users(id,name,age) values (1,'张麻子',30);
- 指定部分字段添加
mysql> insert into users(name,age) values ('张二麻子',30);
Query OK, 1 row affected
- 不指定字段添加(标准添加省略了字段)
mysql> insert into users values(null,'张三麻子',30);
Query OK, 1 row affected
- 批量添加
mysql> insert into users values
-> (null,'mz',30),
-> (null,'a',12);
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0
修改数据
格式:update 表名 set 字段1=值1,字段2=值2,字段3=值3,……where条件
mysql> update users set name='李四麻子',age=28 where id=1;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update users set name='李四',age=12 where id in(2,3);
Query OK, 2 rows affected
Rows matched: 2 Changed: 2 Warnings: 0
mysql> update users set name='李四',age=12 where id=2 or id =3;
Query OK, 0 rows affected
Rows matched: 2 Changed: 0 Warnings: 0
id in(2,3) 等价于 id=2 or id =3
删除数据
格式:delete from 表名 where 条件
mysql> delete from users where id=5;
Query OK, 1 row affected
SELECT 查询
格式:select 字段 from 表名
mysql> select * from student;
+----+------+----------+-----+----------+-------------+----------+------------+---------------+
| id | name | password | sex | grade_id | phone | location | birthday | email |
+----+------+----------+-----+----------+-------------+----------+------------+---------------+
| 1 | 张三 | 123 | 男 | 1 | 12312312312 | 北京 | 1999-01-14 | 123@123.com |
| 2 | 李四 | 123 | 女 | 2 | 12312312344 | 上海 | 1998-09-08 | 1232@qq.com |
| 3 | 王五 | 123 | 男 | 5 | 12312344423 | 杭州 | 1999-07-05 | 44433@111.com |
+----+------+----------+-----+----------+-------------+----------+------------+---------------+
3 rows in set
DISTINCT关键字能够检索不同的行
mysql> select distinct stu_id from score;
+--------+
| stu_id |
+--------+
| 1 |
| 2 |
| 3 |
+--------+
3 rows in set
mysql> select stu_id from score;
+--------+
| stu_id |
+--------+
| 1 |
| 2 |
| 3 |
| 1 |
| 2 |
| 3 |
+--------+
6 rows in set
LIMIT关键字能够限制显示的行数
mysql> select distinct stu_id from score limit 1;
+--------+
| stu_id |
+--------+
| 1 |
+--------+
1 row in set
order by 排序
mysql> select distinct stu_id from score order by stu_id;
+--------+
| stu_id |
+--------+
| 1 |
| 2 |
| 3 |
+--------+
3 rows in set
mysql> select distinct stu_id from score order by stu_id desc;
+--------+
| stu_id |
+--------+
| 3 |
| 2 |
| 1 |
+--------+
3 rows in set
mysql>
通过order by子句 可以将数据按某个/某些字段正序/倒序排序
条件过滤 where 子句
mysql> select score,stu_id from score where subject_id =1;
+-------+--------+
| score | stu_id |
+-------+--------+
| 100 | 1 |
+-------+--------+
1 row in set
在同时使用where 和order by 的时候,要将order by 放在后面,否则会报错
where子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> != | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
between…and… | 两个值之间 |
is null | 空值 |
and和or
mysql> select name from student where sex='男' and grade_id=1;
+------+
| name |
+------+
| 张三 |
+------+
1 row in set
多个条件语句之间可以用and 和or 连接,以完成更加复杂的筛选
当or和and同时存在时,SQL 会优先处理and,我们可以通过加圆括号()的方式来提高优先级;
in 和 not
mysql> select name from student where grade_id in (1,2);
+------+
| name |
+------+
| 张三 |
| 李四 |
+------+
2 rows in set
IN 操作符允许我们在 WHERE 子句中规定多个值。效果与or类似。
in的优点
(1)在很多合法选项时,IN操作符的语法更清楚,更直观。
(2)在与其它AND和OR操作符组合使用IN时,求值顺序更容易管理。
(3)IN操作符用来指定要匹配值的清单时,功能与OR相当,不过一般比一组OR操作符执行得更快。
(4)IN的最大优点是可以包含其他SELECT语句,能够动态地建立WHERE子句。
mysql> select name from student where grade_id not in (1,2);
+------+
| name |
+------+
| 王五 |
+------+
1 row in set
WHERE 子句中的 NOT 操作符有且只有一个功能:否定它之后所跟的任何条件。
like与通配符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
%代表任意数量的任意字符 _代表一个任意字符
比如:
%a% 字段中有a就符合条件
a% 字段由a开头
%a 字段以a结尾
张_ 字段为张某
通配符使用注意
(1)不要过度使用通配符,如果其他操作符能达到相同的目的,应该使用其他操作符。
(2)在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
(3)仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。
在MySQL中使用正则 REGEXP
select name from stu where name regexp '[0-5]abc';
字段的计算
拼接 concat()函数
功能:将多个字符串连接成一个字符串。
语法:concat(str1, str2,…)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
使用别名 as
- SQL 别名用于为 表 或 表中的列 提供临时名称。
- SQL 别名通常用于使 表名 或 列名 更具可读性。
- SQL 一个别名只存在于查询期间。
mysql> select name as 名字 from student;
+------+
| 名字 |
+------+
| 张三 |
| 李四 |
| 王五 |
+------+
3 rows in set
GROUP BY 分组
mysql> select grade_id,count(*) from student group by grade_id;
+----------+----------+
| grade_id | count(*) |
+----------+----------+
| 1 | 1 |
| 2 | 1 |
| 5 | 1 |
+----------+----------+
3 rows in set
“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
HAVING
对分组进行筛选,规定符合条件的分组。
mysql> select grade_id,count(name) as nums from student group by grade_id;
+----------+------+
| grade_id | nums |
+----------+------+
| 1 | 2 |
| 2 | 1 |
| 5 | 1 |
+----------+------+
3 rows in set
mysql> select grade_id,count(name) as nums from student group by grade_id having nums > 1;
+----------+------+
| grade_id | nums |
+----------+------+
| 1 | 2 |
+----------+------+
1 row in set