数据库学习

一.连接数据库

1,win+R->services.msc->MySql-启动

2,cmd->mysql -uroot -p->输入密码

二.新建数据库

三.常用语句

1.操作表,创建表

CREATE TABLE Students
(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT not NULL ,
s_name VARCHAR(20) DEFAULT '',
age INT DEFAULT 0,
height DECIMAL (5,2),
gender enum('男','女') DEFAULT '男',  -- 枚举是从一开始的
cls_id INT ,
is_delete BIT DEFAULT 0
);

2.删除表

drop TABLE students  //删除表结构

delete from students   //保留表结构,删除表数据

3.增删改数据

insert into Students values (0,'小明',21,182,1,1,0);

DELETE from students WHERE s_name="梦月";

UPDATE students SET cls_id=3 WHERE age=22;

四.查询数据

1.基础查询

SELECT * from students;

SELECT DISTINCT gender from students;  //消除重复行

SELECT s_name as 姓名,age as 年龄 from students;  //改名

2.条件查询

//比较运算

SELECT * from students WHERE age>18;   

//逻辑运算   and/or/NOT
SELECT * FROM students WHERE age>18 and gender=1; 

SELECT * FROM students WHERE not (age>18 and gender=1)

//模糊查询  like %一个或多个字符 -一个字符/rlike ^周.*伦$ 开头结尾

-- 查询名字中含有小的人
-- SELECT s_name from students WHERE s_name LIKE "%小%";
-- 查询以周开头,以伦结尾的名字
SELECT s_name from students WHERE s_name RLIKE "^周.*伦$";

3.范围查询

-- 不连续范围 in(,) not in(,)
-- SELECT s_name FROM students WHERE s_name in("周杰","丹丹");
-- 连续范围 BETWEEN...AND../ not bewteen...AND
-- 查询学生年纪在18-24之间的
-- SELECT s_name,age from students WHERE age BETWEEN 18 and 21;
-- SELECT * from students WHERE age not BETWEEN 18 and 21;
-- 空判断 is null/is not NULL
SELECT * FROM students WHERE height is NULL;

4.排序查询

-- 排序 ORDER BY 字段 asc(升序) DESC(降序)
-- 年纪从小到大排序,如果年纪相同就高度从高到低
-- SELECT * from students ORDER BY age,height DESC;
-- 18到50岁男性按年纪从小到大排序
 SELECT * FROM students WHERE gender=1 and (age BETWEEN 18 and 50) ORDER BY age;

5.分页查询

查询前2个学生信息

-- SELECT * FROM students LIMIT 2;
-- 公式:第N页,limit (N-1)*每页个数
SELECT * FROM students LIMIT 2,2;

6.聚合函数

- 总数COUNT() 最大MAX() 最小MIN() 
-- 平均值AVG() 求和sum() 四舍五入round()

-- SELECT MAX(age) from students;
-- SELECT count(*) FROM students;
-- SELECT AVG(height) FROM students;

-- 分组 GROUP BY ,一般与聚合函数一起使用 GROUP_CONCAT() 显示同组中的信息
SELECT gender,GROUP_CONCAT(s_name) FROM students GROUP BY gender;

-- HAVING/WHERE 
-- where是分组前对数据进行过滤,不能和聚合函数一起使用,having是分组后对数据进行过滤,和聚合函数一起使用

7.链接查询与自关联

-- 内链接:两个表匹配的数据
-- 右链接:两表匹配的数据和右表特有的数据,左表不存在的用null填充
-- 左链接:两表匹配的数据和左表特有的数据,右表中不存在的用null填充

-- SELECT * FROM students INNER JOIN classes on students.cls_id=classes.id;
-- 显示学生所有信息并且只显示班级名称
-- SELECT s.*,c.c_name FROM students as s INNER JOIN classes as c on s.cls_id=c.id ORDER BY s.id;
-- SELECT c.c_name as 班级,s.s_name as 姓名 FROM students as s INNER JOIN classes as c on s.cls_id=c.id ORDER BY c.c_name;
-- SELECT c.c_name as 班级,s.s_name as 姓名 FROM students as s RIGHT JOIN classes as c on s.cls_id=c.id;
-- SELECT c.c_name as 班级,s.s_name as 姓名 FROM students as s RIGHT JOIN classes as c on s.cls_id=c.id HAVING s.s_name is NULL;

-- 子关联表查询
-- 查询山东省唐山市下属的所有县
-- SELECT city.city,country.district FROM area as city INNER JOIN area as country on city.id=country.parent HAVING city.city="唐山市";

-- 子查询 select..(select..)
-- 查询最高的学生信息
SELECT * FROM students where height=(SELECT MAX(height) FROM students);
SELECT * FROM students WHERE height=(SELECT MAX(height) FROM students WHERE gender=1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值