鹿泽鹿泽  2024-03-28 10:18:09 鹿泽笔记 隐藏边栏  0 

本文为数据库的基础概念和命令总结,包括查询、增删改、库表管理等。

1、数据库的好处

持久化数据到本地、可以实现结构化查询,方便管理。

2、常见概念

DB:数据库,保存一组有组织的数据的容器。

DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据。

SQL:结构化查询语言,用于和DBMS通信的语言。

3、数据库存储数据的特点

将数据放到表中,表再放到库中。

一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。

表具有一些特性,这些特性定义了数据在表中如何存储,类似java中“类”的设计。

表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”。

表中的数据是按行存储的,每一行类似于java中的“对象”。

4、MySQL的启动和停止

启动:net start 服务名(例如:net start mysql)

停止:net stop 服务名(例如:net stop mysql)

5、MySQL的登录和退出

登录:mysql -h 主机名 -P 端口号 -u 用户名 -p密码

(注意:-p和密码中间不能加空格)

(例如:mysql 【-h localhost P 3306】 -u root -p密码 ,若是登录本地的,【】内的可以不写)

退出:exit 或 ctl+c

6、MySQL常见命令

show databases; #查看所有的数据库

use 库名; #打开指定 的库

show tables ; #显示库中的所有表

show tables from 库名; #显示指定库中的所有表

create table 表名(

字段名 字段类型,

字段名 字段类型

); 创建表

desc 表名; #查看指定表的结构

select * from 表名; #显示表中的所有数据

7、查询语句

select 字段名 from 表名;

select 字段名1,字段名2,...... from 表名;

select * from 表名;

select 常量值;(注意:字符型和日期型的常量值要用单引号括起来,数值型不需要)

select 函数名;

select 表达式;

select 数值+数值;  /*结果为数值*/

select 字符+数值; /*试图将字符转换成数值,转换成功则继续运算,转换不成功则把字符当成成0再运算*/

select null+值; /*结果都为null*/

#别名

select 字段名 as 别名 from 表名;

select 字段名 别名 from 表名; /*可直接用空格代替as*/

#去重

select distinct 字段名 from 表名;

#concat函数

select concat(字符1,字符2,......) from 表名;

#ifnull函数

#判断某字段或表达式是否为null,如果为null,返回指定的值(比如指定0),否则返回原本的值

select ifnull(字符, 0) from 表名;

#isnull

#判断某字段或表达式是否为null,是则返回1,不是则返回0

select 字符1 from 表名 where 字符1 is null;

select 字符1 from 表名 where 字符1 is not null;

8、条件运算符

>
<
>= 
<= 
= ,<=> 安全等于
!= ,<>

9、逻辑运算符

and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true

9、模糊查询

like 
between and
in
is null

10、排序查询

#语法
select
	要查询的东西
from
	表
where 
	条件

order by 排序的字段|表达式|函数|别名 【asc|desc】
(默认升序)

#实践代码-----------------------------
select * from employees order by salary desc;
select * from employees order by salary asc;

select * 
from employees
where department_id >= 90
order by hiredate asc;

#按年薪的高低显示员工的信息和年薪(按表达式排序)
select *, salary*12*(1+ifnull(commission_pct, 0)) as 年薪
from employees
#order by salary*12*(1+ifnull(commission_pct, 0)) desc;
order by 年薪 desc;

#按姓名长度显示员工的姓名和工资【按函数排序】
select length(last_name) as 字节长度, last_name, salary
from employees
order by 字节长度 desc;

#查询员工信息,先按工资什序,再按员工编号降序【按多个字段排序】
select *
from employees
order by salary asc, employee_id desc;

11、实践代码

use myemployees;

select * from employees;
select first_name from employees; 
select first_name as hhh from employees; 
select first_name hhh from employees; 
select distinct department_id from employees; 
select ifnull(commission_pct, 0)  as '奖金率', commission_pct from employees;
select concat(first_name,'___' ,last_name,'___',ifnull(commission_pct, 0)) as output from employees; 
select 100;
select 'xym';
select 100*20 as resulet;
select version();

/*
select 
		查询列表
from
		表名
where
		筛选条件;
*/

select * from employees where salary>12000;
select last_name, department_id from employees where department_id <> 90;

select last_name, salary, commission_pct 
from employees 
where salary >= 10000 and salary <= 20000;

select *
from employees
where not(department_id < 90 or department_id>110) 
	  or salary > 15000;

/*通配符:%任意多个字符
		  _任意单个字符
*/
select * from employees where last_name like '%a%';
select * from employees where last_name like '_e_l';

select * 
from employees 
where last_name 
like '_$_%' escape '$';*/  /*查询第二个字符为_的员工,转义*/

select * 
from employees 
where employee_id 
between 100 and 120;  /*包含临界值(闭区间),不能颠倒大小*/

select last_name, job_id
from employees 
#where job_id='IT_PROT' or  job_id= 'AD_VP' or job_id = 'AD_PRES';
where job_id in('IT_PROT','AD_VP','AD_PRES')

/*
is null:仅可以判断 null
<=>:既可以判断 null,又可以判断数值
*/

select last_name, commission_pct
from employees 
#where commission_pct is null;
where commission_pct is not null;

select last_name, commission_pct
from employees 
where commission_pct <=> null;   /*安全等于*/

select last_name, commission_pct, salary
from employees 
where salary <=> 12000;   /*安全等于*/

12、函数

#语法
select 函数名() from 表

13、单行函数

日期函数

/*now当前系统日期+时间
curdate当前系统日期
curtime当前系统时间
datediff(date1, date2)日期之差date1-date2
str_to_date 将字符转换成日期
date_format将日期转换成字符
*/

select now();
select curdate();
select curtime();
select year(now()) 年, month(now()) 月;
select year('1998-8-18') 年;
select monthname(now()) 月;
select datediff(now(), '1998-10-8');

#str_to_data:将日期格式的字符转换成指定格式日期
select str_to_date('1992-4-3', '%Y-%m-%d') output;
#查询入职日期为1992-4-3的员工信息
select * from employees where hiredate='1992-4-3';
select * from employees where hiredate=str_to_date('4-3-1992', '%m-%d-%Y');

#date-format:将日期转换成字符
select date_format(now(), '%Y年%m月%d日');
#查询有奖金的员工名和入职日期
select last_name, date_format(hiredate, '%m月/%d日 %Y年') 入职日期
from employees
where commission_pct is not null;

其它函数

/*version版本
database当前库
user当前连接用户*/

select version();
select database();
select user();
1、文章版权归作者所有,未经允许请勿转载。
2、本站所有文章,如无特殊说明或标注,均为本站原创发布。任何在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们邮箱:526009505@qq.com进行处理。
3、咨询请联系QQ:526009505