- ubuntu 下安装mysql
- 安装服务器端:在终端输入以下命令:
sudo apt-get install mysql-server
- 启动服务
sudo service mysql start
- 查看进程是否启动
ps ajx|grep mysql
- 停止服务
sudo service mysql stop
- 重启服务
sudo service mysql restart
- 进入mysql
mysql -uroot -p
输入数据库密码
- 退出mysql
quit/exit
- 查看操作
select version(); [查看数据库版本]
select current database(); [ 查看当前使用的数据库]
show databases; [ 查看所有数据库]
show tables; [查看所有表]
- 切换数据库
use 数据库名
- 创建、删除(数据库,表)
create database 库名 [ 创建数据库]
create table 表名(字段1 类型 约束,字段2 类型 约束,…) [ 创建表]
drop database 库名 [删除数据库]
drop table 表名 [ 删除表]
- 修改表操作
alter table 表名 add 新字段名 类型 约束;[增加表字段]
alter table 表名 modify 字段名 类型 约束;[ 修改字段类型约束]
alter table 表名 change 原字段名 新字段名 类型 约束; [重命名字段重定义类型约束]
alter table 表名 drop 字段名; [删除表中字段]
- 查看表操作
desc 表名 ; [查看表字段及其类型约束]
- 查询表操作
select * from 表名 ;[查询表中所有数据]
select 字段名1,字段名2… from 表名; [查询表中某字段的数据]
select * from 表名 where 条件; [根据条件查询表中的数据]
- 增加表数据操作
insert into 表名 values(),(),… ;
insert into 表名(列名1,列名2…) values(值1,值2),(值1,值2);
- 修改表数据操作
update 表名 set 字段**名=值 where 条件 [根据条件修改表中字段的数据]
- 删除表数据操作
delete from 表名;[删除表中所有数据]
delete from 表名 where 条件 ;[根据条件删除数据]
- 起别名
我们可以对要查询的字段或者表起别名,方便多表书写数据,注意表别名要和字段名相对应;
select gender,age from students where class=‘一班’;
起别名后
select s.gender,s.age from students as s where class=‘一班’;
- 数据库查询之去重(distinct)
当我们查询表中有重复的数据时可以进行去重
select distinct gender from 表名 where age<30;
- 数据库查询之 分组(group by),order by (排序)
--------- 创建数据库,表并插入数据---------------
create database test_d;
use test_d;
create table test_t(
id int unsigned not null primary key auto_increment,
name varchar(20) not null,
gender enum(“男”,“女”) not null,
age int not null
);
insert into test_t values(null,‘孙权’,‘男’,30),(null,‘孙尚香’,‘女’,23),(null,‘孙策’,‘男’,40),(null,‘孙坚’,‘男’,57),(null,‘周瑜’,‘男’,41),(null,‘甘宁’,‘男’,39),(null,‘干皇后’,‘女’,15),(null,‘糜夫人’,‘女’,36),(null,‘王异’,‘女’,19),(null,‘马超’,‘男’,27),(null,‘马岱’,‘男’,22);
--------- 由分组查询数据 ---------------
select gender from test_t group by gender;
select gender,group_concat(name) from test_t group by gender; [注意 group by 中 select 后面只能查询分组的字段名和函数 , group_concat[字段名]]
select gender,group_concat(name) from test_t where age < 30 group by gender;[ where 条件要在 group by 前面]
--------- 由排序查询数据 ---------------
select name from test_t order by age;
select name from test_t order by age desc;
--------- 由分组查询数据并排序 ---------------
select gender,group_concat(name),concat(age),avg(age) from test_t where age <35 group by gender order by avg(age) desc; [group by 和 order by 同时使用时注意 order by 后面只能跟select查询的字段,即只能跟分组的字段名和函数]
- 内连接(inner join …on )
两个表根据各自一个字段进行连接,字段中的类型,约束要相对应。查询会返回两个表的所有字段,最后如果存在两个表中不对应的数据则不对应的数据不会显示
select * from 表名1 inner join 表名2 on 表名1.字段名1=表名2.字段名2 where 条件; [注意此时如果两个表中字段名有重复,比如说两个表中都要 name 字段,那么就会报错,如果有重复,可以通过给重复字段名起别名的方式来处理]
- 外连接(left join …on 和 right join …on)
left join …on 中左边是主表,右边是从表
right join …on 中右边是主表,左边是从表
当两个表中有不对应的数据时会显示主表中的数据,此时从表字段名中不对应数据的值为null
-
自连接(自己表中的两个字段相匹配)
-
逻辑运算符
and 且
or 或
not 非 -
模糊查询(like)
1.like
2.% 表示任意多个任意字符
3._ 表示一个任意字符
select name,age from 表 where name like=’%王%’;[查询姓名中含有 ‘王’ 的]
select name,age from 表 where name like =‘王__’;[查询姓名中以’王’字开头,并且一共三个字的]
-
范围查询
1.in() :括号里相当于或,不连续
2.between … and … :一段连续的范围
select name from 表 where age in(10,25,31);[查询年龄是10岁,25岁,31岁的人的名字]
select name from 表 where age between 10 and 35 ;[查询年龄在10到35岁之间的人的名字]
- 空值判断(is null,is not null)
select * from 表名 where height is null;[查询身高填写为空的人的信息]
select * from 表名 where height is not null;[查询身高填写不为空的人的信息]
- 聚合函数
max(列) 最大值
min(列) 最小值
avg(列) 平均值
sum(列) 求和
count(*) 计算不包括null的总行数
- limit 限制记录
limit 起始记录,记录数**
limit 记录数
select * from goods limit 5,2;[从下标为5的行开始,取2个数据]
select * from goods limit 2; [取2个数据]
分页(网站分页,例如百度搜索出来每一页)
公式 limit(下标-1)*显示数量,显示数量;
- 子查询(查询中嵌套查询,且每个查询都是完整的查询语句)
标量子查询 [一行一列即一个值]
列子查询 [一列多行]
行子查询 [一行多列]
表子查询 [多行多列]
**SQL语句的完整格式 _ 不要被吓到 其实很简单 ! _ !
SELECT select_expr [select_expr,…] [
FROM tb_name
[JOIN 表名]
[ON 连接条件]
[WHERE 条件判断]
[GROUP BY {col_name | postion} [ASC | DESC], …]
[HAVING WHERE 条件判断]
[ORDER BY {col_name|expr|postion} [ASC | DESC], …]
[ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
]**