新建表
CREATE TABLE users (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
username VARCHAR(20) NOT NULL COMMENT '用户名',
sex TINYINT DEFAULT 0 COMMENT '用户性别',
age TINYINT UNSIGNED COMMENT '用户年龄'
);
写入
// 单条插入
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
// 如果数据是字符型,必须使用引号,如:"value" 或 'value'。
// table_name 后不加字段的话,VALUES必须写入全部字段的值 如:
INSERT INTO users VALUES (NULL,'小明',0,20);
// 在AUTO_INCREMENT列中,写null或defaul会自增
// 选择字段写入
INSERT INTO users (username,age) VALUES ('阿喵',20);
// 查询结果 SELECT * FROM users;
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 1 | 小明 | 0 | 20 |
| 2 | 阿喵 | 0 | 20 |
+----+----------+------+------+
// 多条插入
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ),( value1, value2,...valueN )...;
// 例
INSERT INTO users VALUES (NULL,'小海',0,20),(NULL,'小红',0,20),(NULL,'小蚂',0,20);
// 查询
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 1 | 小明 | 0 | 20 |
| 2 | 阿喵 | 0 | 20 |
| 3 | 小海 | 0 | 20 |
| 4 | 小红 | 0 | 20 |
| 5 | 小蚂 | 0 | 20 |
+----+----------+------+------+
where
WHERE语句用于限制查询、更新或删除
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
// 查找id 为4的用户
SELECT * FROM users WHERE id = 4;
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 4 | 小红 | 0 | 20 |
+----+----------+------+------+
// 具体使用在删除章节,更新章节,查询章节可找到,这里不再详述
删除
DELETE FROM table_name [WHERE Clause]DELETE FROM 命令用来删除 MySQL 数据表中的记录。
如果没有指定 WHERE 条件,MySQL 表中的所有记录将被删除。
// 删除id 大于等于 5的数据
DELETE FROM users WHERE id >= 5;
// 不加WHERE将会删除所有用户
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 1 | 小明 | 0 | 20 |
| 2 | 阿喵 | 0 | 20 |
| 3 | 小海 | 0 | 20 |
| 4 | 小红 | 0 | 20 |
+----+----------+------+------+
// 删除小明的数据
DELETE FROM users WHERE username = '小明';
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 2 | 阿喵 | 0 | 20 |
| 3 | 小海 | 0 | 20 |
| 4 | 小红 | 0 | 20 |
+----+----------+------+------+
更新
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
// 更新所有用户性别为 1
UPDATE users SET sex = 1;
//结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 2 | 阿喵 | 1 | 20 |
| 3 | 小海 | 1 | 20 |
| 4 | 小红 | 1 | 20 |
+----+----------+------+------+
// 也可写表达式 :// id = 2 的用户年龄加 1
UPDATE users SET age = age + 1 WHERE id = 2;
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 2 | 阿喵 | 1 | 21 |
| 3 | 小海 | 1 | 20 |
| 4 | 小红 | 1 | 20 |
+----+----------+------+------+
查询
SELECT column_name,column_name FROM table_name [WHERE Clause]查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
你可以使用 WHERE 语句来包含任何条件。
你可以使用 LIMIT 属性来设定返回的记录数。
具体使用看下文,这里详述
写入查询
INSERT INTO table_name () SELECT field1,field2... FROM other_table_name;
// 新建一个新表
CREATE TABLE `user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) NOT NULL,
`user_age` tinyint(3) unsigned DEFAULT NULL,
`user_sex` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`user_id`)
);
//现在把年龄 20 的用户写入新表
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 2 | 阿喵 | 1 | 21 |
| 3 | 小海 | 1 | 20 |
| 4 | 小红 | 1 | 20 |
+----+----------+------+------+
INSERT INTO user (user_name,user_sex,user_age) SELECT username,sex,age FROM users WHERE age = 20;
//现在新表就有了年龄 = 20 的用户
+---------+-----------+----------+----------+
| user_id | user_name | user_age | user_sex |
+---------+-----------+----------+----------+
| 1 | 小海 | 20 | 1 |
| 2 | 小红 | 20 | 1 |
+---------+-----------+----------+----------+
group by
GROUP BY 语句根据一个或多个列对结果集进行分组。
// 先写入几个用户
INSERT INTO users VALUES (NULL,'大航',0,22),(NULL,'悟空',1,35),(NULL,'杰克',0,25),(NULL,'伏羲',1,80),(NULL,'后羿',0,20);
//查询结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 2 | 阿喵 | 1 | 21 |
| 3 | 小海 | 1 | 20 |
| 4 | 小红 | 1 | 20 |
| 6 | 大航 | 0 | 22 |
| 7 | 悟空 | 1 | 35 |
| 8 | 杰克 | 0 | 25 |
| 9 | 伏羲 | 1 | 80 |
| 10 | 后羿 | 0 | 20 |
+----+----------+------+------+
// 根据性别分组 查看各个性别用户数量
SELECT sex,count(sex) AS count FROM users GROUP BY sex;
// count() 为MySQL聚合函数,对表中记录数进行计数.
// AS 为给count(sex) 起别名
// 结果
+------+-------+
| sex | count |
+------+-------+
| 0 | 3 |
| 1 | 5 |
+------+-------+
having
HAVING用于给GROUP BY 增加条件
//having 条件字段一定要在select语句字段中出现过
// 统计用户年龄
SELECT sex,age,COUNT(age) FROM users GROUP BY age;
// 结果
+------+------------+
| age | count(age) |
+------+------------+
| 20 | 3 |
| 21 | 1 |
| 22 | 1 |
| 25 | 1 |
| 35 | 1 |
| 80 | 1 |
+------+------------+
// 显示年龄大于 22 小于 65 的用户数
SELECT age,count(age) FROM users GROUP BY age HAVING age > 20 && age <65 ;
// 结果
+------+------------+
| age | count(age) |
+------+------------+
| 21 | 1 |
| 22 | 1 |
| 25 | 1 |
| 35 | 1 |
+------+------------+
order by
对查询结果进行排序
SELECT field1, field2,...fieldN FROM table_name1, table_name2... ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列
// id 倒叙
SELECT * FROM users ORDER BY id DESC ;
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 10 | 后羿 | 0 | 20 |
| 9 | 伏羲 | 1 | 80 |
| 8 | 杰克 | 0 | 25 |
| 7 | 悟空 | 1 | 35 |
| 6 | 大航 | 0 | 22 |
| 4 | 小红 | 1 | 20 |
| 3 | 小海 | 1 | 20 |
| 2 | 阿喵 | 1 | 21 |
+----+----------+------+------+
// 年龄倒叙
SELECT * FROM users ORDER BY age DESC ;
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 9 | 伏羲 | 1 | 80 |
| 7 | 悟空 | 1 | 35 |
| 8 | 杰克 | 0 | 25 |
| 6 | 大航 | 0 | 22 |
| 2 | 阿喵 | 1 | 21 |
| 3 | 小海 | 1 | 20 |
| 4 | 小红 | 1 | 20 |
| 10 | 后羿 | 0 | 20 |
+----+----------+------+------+
// 年龄一样可以在追加条件
SELECT * FROM users ORDER BY age DESC,id DESC ;
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 9 | 伏羲 | 1 | 80 |
| 7 | 悟空 | 1 | 35 |
| 8 | 杰克 | 0 | 25 |
| 6 | 大航 | 0 | 22 |
| 2 | 阿喵 | 1 | 21 |
| 10 | 后羿 | 0 | 20 |
| 4 | 小红 | 1 | 20 |
| 3 | 小海 | 1 | 20 |
+----+----------+------+------+
limit
limit子句用于限制查询结果返回的数量
SELECT * FROM tableName LIMIT start,end
limit 5 等同于 limit 0,5
# 返会前5条
SELECT * FROM users LIMIT 5;
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 2 | 阿喵 | 1 | 21 |
| 3 | 小海 | 1 | 20 |
| 4 | 小红 | 1 | 20 |
| 6 | 大航 | 0 | 22 |
| 7 | 悟空 | 1 | 35 |
+----+----------+------+------+
// 返回第3条和第4条
SELECT * FROM users LIMIT 2,2;
// 结果
+----+----------+------+------+
| id | username | sex | age |
+----+----------+------+------+
| 4 | 小红 | 1 | 20 |
| 6 | 大航 | 0 | 22 |
+----+----------+------+------+