数据库语言及操作方式

启动:

1.管理员权限下打开cmd,输入net start mysql,启动mysql服务 2.管理员模式下打开cmd,输入mysql -u root -p,键入密码后进入mysql

修改密码:

以root用户登录后,键入以下命令

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

DDL语句(Data Definition Language语句)

创建数据库:

create database dbname; // dbname为数据库的名称

显示所有数据库:

show databases;

指定要操作的数据库:

use dbname;

显示数据库里所有的表:

show tables;

删除指定数据库:

drop database dbname;

创建表

CREATE TABLE 表名称
(
列名称1 数据类型 约束,
列名称2 数据类型 约束,
列名称3 数据类型 约束,
....
)
​
例如:
create table job
(
    name varchar(20), # 不超过20位长字符串
    sex varchar(2), 
    age int(2), 
    hiredate date, # 日期型
    wage decimal(10,2) # 最多10位数字,其中2位小数
);

查看表的定义

DESC tablename;

删除表

drop table tablename; # 可通过日志恢复删除
​
truncate table tablename; # 彻底删除,不可恢复

修改表

alter table job modify name varchar(25);# 修改表某一列的数据类型
​
alter table job add home varchar(30);# 添加一个字段,添加在表最后一列
​
alter table job add birthday date after hiredate;# 添加一个字段,在某一个字段列的后面
​
alter table job add birthday date first;# 添加一个字段,在该表第一列
​
alter table job drop column home;# 删除一个字段
​
alter table job change wage salary decimal(10,2);# 修改表中字段名称

DML语句(Data Manipulation Language)

插入

insert into tablename (field1,field2) values(value1,value2);# 基本语法
​
insert into job(name,sex,age,hiredate,birthday,salary) values("gulugulu","男",3,"2023-04-18","2020-04-18",800000); # 插入对应字段数据,按照写的字段插入
​
insert into job values("gulugulu","男",3,"2023-04-18","2020-04-18",800000); # 不指定插入字段,按table字段类型顺序插入
​
insert into job(name,sex,birthday,salary) values("gulugulu","男","2020-04-18",800000); # 没有规定的字段默认为NULL
​
​
# 一次性插入多条数据
INSERT INTO tablename (field1,field2) VALUES
(value1,value2),
(value1,value2),
(value1,value2),
...;

更新

update tablename set field1 = value1, field2 = value2; # 基本语法
​
update job set age=18 where name = 'gulugulu'; # 修改name为‘gulugulu’的数据的age为18

删除记录

delete from tablename [where condition] # 基本语法
​
delete from job where name = 'gulugulu';# 删除name为'gulugulu'的记录
​
delete from job# 清除所有数据,即删除表

DQL语句(Data Query Language)

去重

使用 distinct 关键字
例如数据库里有多条数据:
name sex age ...
gulu1 男 1 ...
gulu2 男 2 ...
gulu3 男 3 ...
gulu3 男 3 ...
gulu3 男 3 ...
​
select distinct age from job;# 从job表中选取不同的age
​
结果为:
age
1
2
3

条件查询

select * from job where age = 3;# 查询年龄为3的所有数据
​
where 关键字接需要的条件,可以用 and or 等词进行连接

排序

SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2 [DESC|ASC],……fieldn [DESC|ASC]] # 基本语法
​
select * from job order by salary desc;# 按薪水降序查询
select * from job order by salary asc;# 按薪水升序查询
# 默认为升序
​
如果存在多个排序字段 A、B、C,则会按顺序进行排序,即以A为第一关键字排序,如果A相同,则按第二关键字B排序,以此类推

限制

limit 关键字可以限制查询输出的条数
​
select * from job order by salary limit 3;# 输出薪水最低的前三个人
# 默认从第0条记录开始取
​
select * from job order by salary limit 2,3;# 排序后,从第2条记录开始取,取3条

聚合

  • 汇总函数,比如sum求和,count统计数量,max求最大值,min求最小值等

  • group by,对字段进行分组,比如按照部门进行员工数量的统计,那么group by后面就应该跟上部门

  • with 是可选的语法,表示对汇总之后的记录进行再次汇总

  • having 表示对分类后的结果再进行条件的过滤

select sum(salary) from job;# 统计员工的总薪水
​
select max(salary),min(salary) from job;# 取出员工薪水的最大值与最小值
​
select count(1) from job;# 统计表中有多少项
select count(*) from job;# 统计表有多少项
# 两者功能相同,区别在于count(*)会考虑列数,而count(1)把表当成一列来累加,所以列多的时候count(1)快
# 我没想懂为啥要区分开来,感觉功能是一样的。
​
select age,count(1) from job group by age;# 按年龄分组并统计
# 即每个年龄有多少人
​
select age,count(1) from job group by age with rollup;
# with rollup对group分组后的第一个字段进行求和
​
select age,count(1) from job group by age with rollup having count(1) > 1;
# 求和时要求被求和数,即年龄段的人数要大于1才累加

表连接

可以直接用“,”链接,如 
table1,table2
表示内连接
​
也可以用join关键字链接又分为左外连接以及右外连接
table1 left(right) join table2

子查询

我感觉这个叫嵌套查询合理一点。
​
查询结果可以看作一个新表,从这个新表里查询,就叫做子查询
​
select x.age from job as x where x.name in (select y.name from job as y while y.sex="男");
# 先构建一张子表,该子表取出了所有员工中性别为男的名字,构成一张仅包含符合条件的男性员工的表
# 然后查询姓名在这些男性员工里面的员工的年龄
​
# 这是一个很不恰当的例子,但是能理解。举这个例子的原因是我懒得多创建一张表了

联合查询

union 与 union all
​
将两张表竖向拼接,A union B 即把B表放在A表下面
两张表必须要有相同的列。
​
union会对表进行去重
union all不会

参考文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值