基本的SELECT语句
-- # 1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY
SELECT employee_id,last_name ,salary*12 "ANNUAL SALARY"
FROM employees;
-- # IFNULL(expr1,expr2) :假如expr1不为NULL,则 IFNULL() 的返回值为expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
SELECT employee_id,last_name,salary*12*(1+IFNULL(commission_pct,0)) "股东年薪"
FROM employees;
-- # 2.查询employees表中去除重复的job_id以后的数据,DISTINCT:不同的
SELECT DISTINCT job_id
FROM employees;
-- # 3.查询工资大于12000的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary>12000;
-- # 4.查询员工号为176的员工的姓名和部门号
SELECT last_name,department_id
FROM employees
WHERE employee_id = 176;
-- # 5.显示表 departments 的结构,并查询其中的全部数据,DESC+表名显示表结构
DESC departments;
SELECT * FROM departments;
运算符
-- 1.选择工资不在5000到12000的员工的姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
-- 2.选择在20或50号部门工作的员工姓名和部门号
SELECT last_name , department_id
FROM employees
WHERE department_id =20 OR department_id =50;
SELECT last_name , department_id
FROM employees
WHERE department_id IN(20,50);
-- 3.选择公司中没有管理者的员工姓名及job_id
SELECT last_name,job_id
FROM employees
WHERE manager_id IS NULL;
-- # 4.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
-- # 5.选择员工姓名的第三个字母是a的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE "__a%";
-- # 6.选择姓名中有字母a和k的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE "%a%k%" OR last_name LIKE "%k%a%";
-- # 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息 ,REGEXP 使用转义符
SELECT last_name
FROM employees
WHERE last_name LIKE "%e";
SELECT employee_id,first_name,last_name
FROM employees
WHERE first_name REGEXP 'e$';
-- # 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种
SELECT last_name,job_id
FROM employees
-- #where department_id in (80,90,100);
WHERE department_id BETWEEN 80 AND 100;
-- # 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
SELECT last_name,salary,manager_id
FROM employees
WHERE manager_id IN (100,101,110);
排序与分页
-- #1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示:DESC降序,ASC升序
SELECT last_name,department_id,salary
FROM employees
ORDER BY salary DESC,last_name ASC;
-- #2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据
/*
LIMIT [位置偏移量,] 行数
第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移
量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是
1,以此类推);第二个参数“行数”指示返回的记录条数。
*/
SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC
LIMIT 20,20;
-- #3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT last_name,email,department_id
FROM employees
WHERE email LIKE "%e%"
ORDER BY LENGTH(email) DESC,department_id ASC;
多表查询
阿里开发规范:超过三张表,禁止join
常用
创建数据库
CREATE DATABASE database-name
删除数据库
drop database dbname
查询所有数据表
show tables;
查询表的字段信息
desc 表名称;
添加表字段
alter table table1 add transactor varchar(10) not Null;
alter table table1 add id int unsigned not Null auto_increment primary key
如果要删除某一字段,可用命令:
ALTER TABLE 表名称 DROP 字段名;
创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
删除新表
drop table tabname
增加一个列
Alter table 表名 add column 列名 类型
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
删除列:
alter table 表名 drop column 列名;
//SQL与Mysql添加删除列区别,以下为SQL操作 //ALTER TABLE 表名 ADD 字段名 //ALTER TABLE 表名 DROP COLUMN 字段名
添加主键:
Alter table tabname add primary key(col)
删除主键:
Alter table tabname drop primary key(col)
创建索引:
create [unique] index idxname on tabname(col….)
删除索引:
drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
创建视图:
create view viewname as select statement
修改列名
alter table table_name change column address address1 varchar(30)
几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
使用limit分页:selete * from user limit startIndex,pagesize;
使用外连接 A、left (outer) join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right (outer) join: 右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
分组Group by:
一张表,一旦分组完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;
如何修改数据库的名称: sp_renamedb 'old_name', 'new_name'
数据开发-经典
1.按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as #从少到多
记录
---按IP统计连接数---250 select client_addr,count(*) from pg_stat_activity GROUP BY client_addr;
---统计数据库所有连接数---500 select count(1) from pg_stat_activity;