MySQL学习

MySQL学习

主要来自myemployees这个数据库

– 1. 查询工资大于 12000 的员工姓名和工资

  SELECT first_name,last_name,salary
  FROM employees
  WHERE salary>12000;

– 2.返回job_id与 141 号员工相同,salary 比143 号员工多的员工姓名,job_id 和工资 – salary 比143 号员工多,别看多的,就先找到143号员工的salary

 SELECT salary
 FROM employees
 WHERE employee_id=143;

– 返回job_id 与141 号员工相同,其实只要先得到141号员工的job_id这单行,最后用where比较

SELECT job_id
FROM employees
WHERE employee_id=141;

SELECT first_name,job_id,salary
FROM employees
WHERE job_id=(SELECT job_id
              FROM employees
              WHERE employee_id=141)
       AND salary>(SELECT salary
                   FROM employees
                   WHERE employee_id=143)

– 返回公司工资最少的员工的last_name,job_id 和salary

 SELECT last_name,job_id,salary
 FROM employees
 WHERE salary=(SELECT MIN(salary)
               FROM employees);

– 返回公司工资最少的员工的last_name,job_id 和salary

 SELECT last_name,job_id,salary
 FROM employees
 WHERE salary=(SELECT MIN(salary)
               FROM employees);

– 查询最低工资大于50 号部门最低工资的部门id

  -- 先查询50号部门最低工资
 SELECT MIN(salary)
 FROM employees
 WHERE department_id=50;
 -- 先查询50号部门最低工资
 SELECT MIN(salary)
 FROM employees
 WHERE department_id=50;
 
 SELECT department_id,MIN(salary) AS lowSalary
 FROM employees
 GROUP BY department_id
 HAVING lowSalary>( SELECT MIN(salary)
                    FROM employees
                    WHERE department_id=50)

– 返回location_id 是1400 或1700 的部门中的所有员工姓名

 SELECT first_name
 FROM employees
 WHERE department_id IN(
	 SELECT department_id
	 FROM departments
	 WHERE location_id BETWEEN 1400 AND 1700);

– 2. 查询员工号为 176 的员工的姓名和部门号和年薪

 SELECT last_name,department_id,salary*12
 FROM employees
 WHERE employee_id=176;

– 3. 选择工资不在 5000 到 12000 的员工的姓名和工资

 SELECT last_name,salary
 FROM employees
 WHERE salary NOT BETWEEN 5000 AND 12000;-- IN指的是必须在输入的数字内,而不是一个区间

– 4. 选择在 20 或 50 号部门工作的员工姓名和部门号

 SELECT last_name,department_id
 FROM employees
 WHERE department_id IN(20,50);

– 5. 选择公司中没有管理者的员工姓名及 job_id

 SELECT job_id,last_name
 FROM employees
 WHERE manager_id IS NULL;

– 6. 选择公司中有奖金的员工姓名,工资和奖金级别

 SELECT last_name,salary,commission_pct
 FROM employees
 WHERE commission_pct>0;

– 7. 选择员工姓名的第三个字母是 a 的员工姓名

 SELECT last_name
 FROM employees
 WHERE last_name LIKE '__a%';

– 8. 选择姓名中有字母 a 和 e 的员工姓名

 SELECT last_name
 FROM employees
 WHERE last_name LIKE '%a%'OR last_name LIKE '%e%';

– 9. 显示出表 employees 表中 first_name 以 ‘e’结尾的员工信息

SELECT first_name
 FROM employees
 WHERE first_name LIKE '%e';

– 10. 显示出表 employees 部门编号在 80-100 之间 的姓名、职位

 SELECT first_name,job_id
 FROM employees
 WHERE department_id BETWEEN 80 AND 100;

– 11. 显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位

 SELECT first_name job_id
 FROM employees
 WHERE manager_id IN(100,101,110);

– 排序数据

– 1. 查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序

 SELECT first_name,department_id,salary
 FROM employees
 ORDER BY salary DESC , first_name ASC; -- 中间不需要 and

– 2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序

SELECT first_name,salary
 FROM employees
 WHERE salary NOT BETWEEN 8000 AND 17000
 ORDER BY salary DESC;

– 3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序

 SELECT *,LENGTH(email) AS el
 FROM employees
 WHERE email LIKE '%e%'
 ORDER BY el DESC, department_id ASC;

– 单行函数

– 1. 显示系统时间(注:日期+时间)

 SELECT NOW();

– 2. 查询员工号,姓名,工资,以及工资提高百分之 20%后的结果(new salary)

 SELECT employee_id,first_name,salary,(salary*1.2) AS newsalary
 FROM employees;

– 3. 将员工的姓名按 首字母排序,并写出姓名的长度(length)

 SELECT first_name,LENGTH(first_name)
 FROM employees
 ORDER BY SUBSTR(first_name,1,1);-- substr(string string,num start,num length);

**– 4. 做一个查询,产生下面的结果 earns monthly but wants <salary*3>***

 SELECT CONCAT(last_name,' earns ',salary,'monthly but wants ',salary*3) AS dream
 FROM employees;

–5. 使用 CASE-when,按照下面的条件:

          /*job                   grade
           AD_PRES                 A
           ST_MAN                  B
           IT_PROG                 C
           SA_REP                  D
           ST_CLERK                E
         */
    SELECT job_id,
	CASE job_id
	WHEN 'AD_PRES' THEN 'A'
	WHEN 'ST_MAN' THEN 'B'
	WHEN 'IT_PROG' THEN 'C'
	WHEN 'SA_REP' THEN 'D'
	END grade
	FROM employees;

– 分组函数

– 执行顺序 from->where->group by->select

– 1. 查询各 job_id 的员工工资的最大值,最小值,平均值,总和,并按 job_id 升序

 SELECT job_id,MAX(salary),MIN(salary),AVG(salary),SUM(salary)
 FROM employees
 GROUP BY job_id
 ORDER BY job_id ASC;

– 2. 查询员工最高工资和最低工资的差距(DIFFERENCE)

 SELECT  MAX(salary) AS smax,MIN(salary)AS smin,MAX(salary)-MIN(salary) AS diff
 FROM employees;

– 3. 查询各个管理者手下员工的最低工资,其中最低工资不能低于 6000,没有管理者的员工不计算在内

 SELECT MIN(salary) AS smin,manager_id
 FROM employees
 GROUP BY manager_id
 HAVING smin>6000 AND manager_id IS NOT NULL;-- 也可以在分组前用where,注意这里smin 不能用salary

– 4. 查询所有部门的编号,员工数量和工资平均值,并按平均工资降序

 SELECT department_id,COUNT(department_id),AVG(salary) AS avs
 FROM employees
 GROUP BY department_id
 ORDER BY avs DESC;

– 5. 选择具有各个 job_id 的员工人数

 SELECT job_id,COUNT(job_id)
 FROM employees
 GROUP BY job_id;

– 分组查询

– 1. 查询公司员工工资的最大值,最小值,平均值,总和

 SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary)
 FROM employees;

– 2. 查询员工表中的最大入职时间和最小入职时间的相差天数 (DIFFRENCE)

 SELECT MAX(hiredate),MIN(hiredate),DATEDIFF(MAX(hiredate),MIN(hiredate)) AS 'interval day'
 FROM employees;

– 3. 查询部门编号为 90 的员工个数

 SELECT COUNT(*) AS nums
 FROM employees
 WHERE department_id=90;

– 语法连接查询

– 一、查询编号>3 的女神的男朋友信息,如果有则列出详细,如果没有,用 null 填充

 SELECT *
 FROM boys
 WHERE id IN(SELECT boyfriend_id
             FROM beauty
             WHERE id>3);

– 二、查询哪个城市没有部门

 SELECT *
 FROM locations
 LEFT JOIN departments ON departments.`location_id`=locations.`location_id`
 WHERE department_id IS NULL;

SELECT 
  loc.`city` 
FROM
  locations loc 
  LEFT OUTER JOIN departments dep 
    ON loc.`location_id` = dep.`location_id` 
WHERE dep.`department_id` IS NULL ;

– 三、查询部门名为 SAL 或 IT 的员工信息

 SELECT department_name
 FROM departments
 WHERE department_name IN('SAL','IT');

– 语法链接2

– 1. 显示所有员工的姓名,部门号和部门名称

 SELECT first_name,D.department_id,D.department_name
 FROM departments AS D,employees AS E
 WHERE D.`department_id`= E.`department_id`;

– 2. 查询 90 号部门员工的 job_id 和 90 号部门的 location_id

 SELECT E.`job_id`,D.`location_id`
 FROM employees AS E, departments AS D 
 WHERE E.`department_id`=D.`department_id` AND E.`department_id`=90;

– 3. 选择所有有奖金的员工的last_name , department_name , location_id , city

 SELECT last_name,department_name,D.location_id,city
 FROM employees AS E,locations AS L, departments AS D
 WHERE E.`department_id`=D.`department_id` AND D.`location_id`=L.`location_id`AND       commission_pct>0;

– 4. 选择city在Toronto工作的员工的 last_name , job_id , department_id , department_name

 SELECT last_name,job_id,D.department_id,department_name
 FROM employees AS E,locations AS L, departments AS D
  WHERE E.`department_id`=D.`department_id` AND D.`location_id`=L.`location_id` AND  city='Toronto';

– 5.查询每个工种、每个部门的部门名、工种名和最低工资

 SELECT J.job_id,D.department_name,job_title,MIN(salary)
 FROM jobs AS J,employees AS E,departments AS D
 WHERE J.`job_id`=E.`job_id` AND D.`department_id`=E.`department_id`
 GROUP BY department_name,job_title; #看到每个要联想到group by

– 6.查询每个国家下的部门个数大于 2 的国家编号

 SELECT COUNT(*),country_id
 FROM locations AS L,departments AS D
 WHERE L.location_id=D.location_id
 GROUP BY country_id
 HAVING COUNT(*)>2;

– 7、选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式

   /* employees  Emp#  manager Mgr#
      kochhar    101    king   100
      */
  SELECT E.`last_name`,E.`employee_id`, M.last_name,M.employee_id
  FROM employees  E,employees  M
  WHERE E.manager_id=M.employee_id ;

– 子查询

– 1. 查询和 Zlotkey 相同部门的员工姓名和工资

 SELECT last_name,salary
 FROM employees
 WHERE department_id=(SELECT department_id
                      FROM employees
                      WHERE last_name='Zlotkey') && last_name!='Zlotkey';

– 2. 查询工资比公司平均工资高的员工的员工号,姓名和工资。

 SELECT employee_id,last_name,salary
 FROM employees
 WHERE salary > (SELECT AVG(salary)
                 FROM employees);

– 3. 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资

本题先获取各个部门的平均工资在之后与employeees表用department_id进行内连接,即可将平均工资的字段衔接到emp表,最后用where即可

   SELECT employee_id,last_name,salary
   FROM employees e
   INNER JOIN(
       SELECT AVG(salary) AS av, department_id
       FROM employees
       GROUP BY department_id
    )ag
    WHERE e.`department_id`=ag.department_id;

– 4. 查询和姓名中包含字母 u 的员工在相同部门的员工的员工号和姓名

 SELECT employee_id,last_name
 FROM employees e
 INNER JOIN(
      SELECT  department_id
      FROM employees
      WHERE last_name LIKE '%u%'
      GROUP BY department_id
 )ag
 WHERE ag.department_id = e.`department_id`;

子查询department_id有多个值可以用in

 SELECT last_name,employee_id
 FROM employees
 WHERE department_id IN(
    SELECT  DISTINCT department_id
    FROM employees
    WHERE last_name LIKE '%u%'
 );

– 5. 查询在部门的 location_id 为 1700 的部门工作的员工的员工号

 SELECT employee_id
 FROM employees
 WHERE department_id IN(	
	SELECT department_id
	FROM departments
	WHERE location_id =1700
 );

– 6. 查询管理者是 King 的员工姓名和工资

 SELECT E.last_name,E.salary
 FROM employees E,employees M
 WHERE E.`manager_id`=M.`employee_id`AND M.`last_name`='K_ing';

– 7. 查询工资最高的员工的姓名,要求 first_name 和 last_name 显示为一列,列名为 姓.名

 SELECT CONCAT(first_name,' ',last_name) AS ename,MAX(salary)
 FROM employees; 

– 数据处理

– 1. 运行以下脚本创建表 my_employees

CREATE TABLE my_employees(
	Id INT(10),
	First_name VARCHAR(10),
	Last_name VARCHAR(10),
	Userid VARCHAR(10),
	Salary DOUBLE(10,2)
   )
      CREATE TABLE users(
	id INT,
	userid VARCHAR(10),
	department_id INT 
    )

– 2. 显示表 my_employees 的结构

 DESC my_employees;

– 3. 向 my_employees 表中插入下列数据

  INSERT INTO my_employees VALUE(1,'patel','Ralph','Rpatel',895),
                                (2,'Dancs','Betty','Bdancs',860),
                                 (3,'Biri','Ben','Bbiri',1100),
                                 (4,'Newman','Chad','Cnewman',750),
                                 (5,'Ropeburn','Audrey','Aropebur',1550);
  DROP TABLE my_employees;
 /* ID  FIRST_NAME  LAST_NAME  USERID   SALARY
     1   patel       Ralph      Rpatel    895
     2   Dancs       Betty      Bdancs    860
     3   Biri        Ben        Bbiri     1100
     4   Newman      Chad       Cnewman   750
     5   Ropeburn    Audrey     Aropebur  1550
  */

– 4. 向 users 表中插入数据

INSERT INTO users VALUE(1,'Rpatel',10),(2,'Bdancs',10),(3,'Bbiri',20),(4,'Cnewman',30),(5,'Aropebur',40);

– 5. 将 3 号员工的 last_name 修改为“drelxer”

-- ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;#设置默认值的,修改用update
 UPDATE  my_employees
 SET last_name='drelxer'
 WHERE id=3;  

– 6. 将所有工资少于 900 的员工的工资修改为 1000

 UPDATE my_employees
 SET Salary=1000
 WHERE Salary<900;

– 7. 将 userid 为 Bbiri 的 user 表和 my_employees 表的记录全部删除

 DELETE u,e
 FROM my_employees e,users u
 WHERE e.userid=u.userid AND u.userid='Bbiri';

– 8. 删除所有数据

 ##如果我们仅仅需要删除表内的数据,但并不删除表本身,那么我们该如何做呢?TRUNCATE TABLE table_name
 DROP TABLE my_employees;


– 创建和管理表

– 1. 创建表 dept1

CREATE TABLE dept1(
      id INT(7),
      NAME VARCHAR(25)
 )

– 2.将表 departments 中的数据插入新表 dept2 中

CREATE TABLE dept2
SELECT *
FROM departments;

– 3.创建表 emp5

NAME  NULL?  TYPE
	id           INT(7)
	First_name  VARCHAR (25)
	Last_name  VARCHAR(25)
	Dept_id  INT(7)
 CREATE TABLE emp5(
         id INT(7),
         first_name VARCHAR(25),
         last_name VARCHAR(25),
         dept_id INT(7)
 )

– 4. 将列 Last_name 的长度增加到 50

ALTER TABLE emp5 MODIFY COLUMN last_name VARCHAR(50);

– 5. 根据表 employees 创建 employees2

CREATE TABLE employees2 LIKE myemployees.employees;

– 6. 删除表 emp5

 DROP TABLE emp5;

– 7. 将表 employees2 重命名为 emp5

 ALTER TABLE employees2 RENAME emp5;#可以不需要to

– 8. 在表 dept 和 emp5 中添加新列 test_column,并检查所作的操作

 ALTER TABLE emp5 ADD COLUMN test_column INT;
  ALTER TABLE dept ADD COLUMN test_column INT;

– 9. 直接删除表 emp5 中的列 dept_id

ALTER TABLE emp5 DROP COLUMN department_id;

– 约束

-- 1. 向表 users 的 id 列中添加 PRIMARY KEY 约束(my_emp_id_pk)

DESC users;
 ALTER TABLE users MODIFY COLUMN id INT PRIMARY KEY ;

或者 alter table users add constraint primary key(id);

– 2. 向表 dept2 的 id 列中添加 PRIMARY KEY 约束(my_dept_id_pk)

ALTER TABLE dept2 MODIFY COLUMN department_id INT PRIMARY KEY;

– 3. 向表 users 中添加列 dept_id,并在其中定义 FOREIGN KEY 约束,与之相关联的列是dept2 表中的 id 列。

#ALTER TABLE users ADD CONSTRAINT fk_users_dept2 FOREIGN KEY(dept_id) REFERENCES dept2(id);
 ALTER TABLE users ADD CONSTRAINT fk FOREIGN KEY(department_id) REFERENCES dept2(department_id);

– 事务

– 1.创建一个表,里面有 id 为主键,stuname 唯一键,seat 座位号,要求将 id 设置成自增

CREATE TABLE stu (
       id INT AUTO_INCREMENT,
       stuname VARCHAR(10) UNIQUE,
       seat INT,
       PRIMARY KEY(id)
  );

#怎么让虚拟机Linux访问window的数据库呢? – 2.要求用事务的方式插入 3 行数据

START TRANSACTION;
   INSERT INTO stu(stuname,seat) VALUES('soup',1),('tang',2);
  COMMIT;

  UPDATE stu
  SET seat=3
  WHERE id =2;

– 3.要求用事务的方式删除数据,并回滚

 START TRANSACTION;
 DELETE FROM stu;
 SELECT * FROM stu;
 ROLLBACK;

– 视图

– 一、创建视图 emp_v1,要求查询电话号码以‘011’开头的员工姓名和工资、邮箱

 /* CREATE VIEW ProductSum (product_type, cnt_product)#视图列名
     AS
     SELECT product_type, COUNT(*)
     FROM Product
     GROUP BY product_type*/#注意这里创建视图的列要与select选的列一致对应
  CREATE VIEW emp_v1(v1_name,v1_salary,v1_email)
  AS SELECT last_name,salary,email
  FROM employees
  WHERE phone_number LIKE '011%';
  SELECT *
  FROM emp_v1;

– 二、要求将视图 emp_v1 修改为查询电话号码以‘011’开头的并且邮箱中包含 e 字符的员工姓名和邮箱、电话号

 CREATE OR REPLACE  VIEW emp_v1 
 AS SELECT last_name,salary,email
 FROM employees
 WHERE phone_number LIKE '011%' AND email LIKE '%e%';

– 三、向 emp_v1 插入一条记录,是否可以?

插入视图的字段必须和试图的列对应,视图和表需要同时进行更新,因此通过汇总得到的视图无法进行更新 如通过group by

– 四、修改刚才视图中的Olsen邮箱为为‘[email protected]

UPDATE emp_v1 SET email='[email protected]' WHERE last_name='olsen';#这里也修改了employees的Olsen的email值

– 六、创建视图 emp_v2,要求查询部门的最高工资高于 12000 的部门信息

 CREATE VIEW emp_v2 
 AS SELECT *
 FROM employees
 GROUP BY department_id
 HAVING MAX(salary)>12000;
 SELECT *
 FROM emp_v2;

– 七、向 emp_v2 中插入一条记录,是否可以?

#不能插入吧,这里使用了聚合函数max(个人观点) 
INSERT INTO emp_v2(employee_id,last_name,manager_id,salary) VALUES(999,'dd',201,1700);

– 八、删除刚才的 emp_v2 和 emp_v1

DROP VIEW emp_v2,emp_v1;

– 函数

– 1、创建函数,实现传入两个 float,返回二者之和

CREATE FUNCTION fun6(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
BEGIN
    SET @SUM=0;
    SET @SUM=num1+num2;
    RETURN @SUM;
END$
SELECT fun6(12.12,23.14)$

– 2、创建函数,实现传入工种名,返回该工种的员工人数

CREATE FUNCTION fun7(job_id VARCHAR(20)) RETURNS INT
BEGIN
    DECLARE num INT DEFAULT 0;
    SELECT COUNT(*) INTO num FROM employees e WHERE e.job_id=job_id;
    RETURN num; 
END$
SELECT fun7('AD_VP')$

– 3、创建函数,实现传入员工名,返回该员工的领导名

SELECT e.last_name FROM employees e WHERE e.employee_id=(SELECT e2.manager_id FROM employees e2 WHERE e2.last_name='Gietz' );
CREATE FUNCTION fun8(last_name VARCHAR(50)) RETURNS VARCHAR(50)
BEGIN
    DECLARE manager_name VARCHAR(50);
    SELECT e.last_name INTO manager_name FROM employees e WHERE e.employee_id=(SELECT e2.manager_id FROM employees e2 WHERE e2.last_name=last_name );
    RETURN manager_name;
END$
SELECT fun8('Ernst')$

– 子查询

– 1. 查询工资最低的员工信息: last_name, salary

– 2. 查询平均工资最低的部门信息 – 3. 查询平均工资最低的部门信息和该部门的平均工资 – 4. 查询平均工资最高的 job 信息 – 5. 查询平均工资高于公司平均工资的部门有哪些? – 6. 查询出公司中所有 manager 的详细信息. – 7. 各个部门中 最高工资中最低的那个部门的 最低工资是多少 – 8. 查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email,salary


#SQL基础教程第二版

– 创建一个新的数据库

-- 创建一个新的数据库
 CREATE DATABASE shop;
 -- 创建一个新表
 /*
 CREATE TABLE < 表名 >
( < 列名 1> < 数据类型 > < 该列所需约束 > ,
< 列名 2> < 数据类型 > < 该列所需约束 > ,
.
< 该表的约束 1> , < 该表的约束 2> ,……);
 */
CREATE TABLE Product(
	product_id CHAR(4)  NOT NULL,
	product_name VARCHAR(100) NOT NULL,
	product_type VARCHAR(32)  NOT NULL,
	sale_price INTEGER  ,
	purchase_price INTEGER  ,
	regist_date DATE  ,
	PRIMARY KEY (product_id)
);

– 表的删除,使用drop无法恢复

DROP TABLE 表名;

– 新增列

ALTER TABLE < 表名 > ADD COLUMN < 列的定义 > ;#列的定义 如purchase_price DATE

– 删除列

ALTER TABLE < 表名 > DROP COLUMN < 列名 > ;

– 插入数据

    INSERT INTO Product VALUES ('0001', 'T 恤衫 ', ' 衣服 ',
	1000, 500, '2009-09-20');
	INSERT INTO Product VALUES ('0002', ' 打孔器 ', ' 办公用品 ',
	500, 320, '2009-09-11');
	INSERT INTO Product VALUES ('0003', ' 运动 T 恤 ', ' 衣服 ',
	4000, 2800, NULL);
	INSERT INTO Product VALUES ('0004', ' 菜刀 ',  ' 厨房用具 ', 
	3000, 2800, '2009-09-20');
	INSERT INTO Product VALUES ('0005', ' 高压锅 ', ' 厨房用具 ',
	6800, 5000, '2009-01-15');
	INSERT INTO Product VALUES ('0006', ' 叉子 ',  ' 厨房用具 ',
	500, NULL, '2009-09-20');
	INSERT INTO Product VALUES ('0007', ' 擦菜板 ', ' 厨房用具 ',
	880, 790, '2008-04-28');
	INSERT INTO Product VALUES ('0008', ' 圆珠笔 ', ' 办公用品 ',
	100, NULL,'2009-11-11');

– 修改表名

RENAME TABLE Poduct TO Product;

 CREATE TABLE addressbook(
      regist_no INT NOT NULL,
      NAME VARCHAR(128)  NOT NULL,
      address VARCHAR(128)  NOT NULL,
      tel_no CHAR(10),
      mail_address CHAR(20),
      PRIMARY KEY(regist_no)
 );

– 1.2 假设在创建练习1.1中的 Addressbook 表时忘记添加如下一列 postal_code (邮政编码)了,请把此列添加到 Addressbook 表中。

 /*列名  : postal_code
 数据类型 :定长字符串类型(长度为 8)
 约束  :不能为 NULL */
 ALTER TABLE addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;

– 编写 SQL 语句来删除 Addressbook 表

 SELECT DISTINCT product_type,regist_date
 FROM product;#如果product_type一样则保留一个
 #所有包含 NULL 的计算,结果肯定是 NULL
 #选取某行是null时采用 is null
 #count(某个具体的列)函数不计算为null的行,但是count(*)是计算所有行数
 SELECT COUNT(*),product_type
 FROM product
 GROUP BY product_type;
 #想要计算值的种类时,可以在 COUNT 函数的参数中使用 DISTINCT
 #注意这两个结果是不一样的
 #先计算数据行数再删除重复数据的结果,脱裤子放屁
 SELECT DISTINCT COUNT(product_type)
 FROM product;
 #计算去除重复数据后的数据行数
 SELECT COUNT(DISTINCT product_type)
 FROM Product;

#创建一个新表

#创建一个新表

 CREATE TABLE ProductIns(
        product_id CHAR(4) NOT NULL,
	product_name VARCHAR(100) NOT NULL,
	product_type VARCHAR(32) NOT NULL,
	sale_price INTEGER DEFAULT 0,#设置默认值为0
	purchase_price INTEGER ,
	regist_date DATE  ,
	PRIMARY KEY (product_id)
);

#如果想将整个表全部删除,可以使用 DROP TABLE 语句,如果只想删除表中全部数据,需使用 DELETE 语句 #① DROP TABLE 语句可以将表完全删除 #② DELETE 语句会留下表(容器),而删除表中的全部数据 #DELETE 语句的删除对象并不是表或者列,而是记录(行)。

#如果想将整个表全部删除,可以使用 DROP TABLE 语句,如果只想删除表中全部数据,需使用 DELETE 语句 #① DROP TABLE 语句可以将表完全删除 #② DELETE 语句会留下表(容器),而删除表中的全部数据 #DELETE 语句的删除对象并不是表或者列,而是记录(行)。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦