数据库基础中的mysql语句有哪些

数据库基础中的mysql语句有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

  数据库与数据库软件:

  数据库是数据容器,可以理解为文件,数据库软件是数据库管理系统,

  提供用户对数据库文件的操作

  schama(模式):

  关于数据库和表的布局及特性的信息

  列(column):

  表由列组成,列中存储着表中某部分的信息。

  行(row):

  表中的数据是按行存储的

  主键:

  表中每一行都应该有可以唯一标识自己的一列,称为主键

  主键可以由单个列构成,也可以由多个列构成

  SQL:

  结构化查询语言,用于和数据库通信

  查询数据库和表命令:

  SHOW DATABASES;

  SHOW TABLES;

  SHOW COLUMNS FROM COLLATIONS; //显示COLLATIONS中的所有列

  auto_increment //自动增量,每添加一个行,该值自动加一

  SELECT prod_name FROM products; //从prducts中检索出prod_name

  SELECT prod_id,prod_name FROM products; //检索多个列

  SELECT DISTINCT vend_id from products; //返回一列中不同的值(过滤掉相同的)

  SELECT prod_name FROM products LIMIT 5; //限制最多输出5行

  SELECT prod_name FROM products LIMIT 4,5; //限制最多从行4输出5行

  SELECT products.prod_name FROM products; //完全限定

  SELECT products.prod_name FROM crashcourse.products; //完全限定(列和表)

  SELECT prod_name FROM products ORDER BY prod_name; //排序

  SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name; //对多个列排序(如果prod_price存在重复,就对prod_name重新排序)

  SELECT prod_name FROM products ORDER BY prod_name DESC/ESC; //排序(升序或降序)

  SELECT prod_id,prod_price,prod_name FROM products WHERE prod_price = 2.5; //使用where过滤(= 《 <> betown等操作)

  SELECT prod_id,prod_price,prod_name FROM products WHERE prod_price BETWEEN 5 AND 10;//在中间

  SELECT prod_id,prod_price,prod_name FROM products WHERE prod_price vend_id = 1003 AND prod_price<=10 3="" 123="" 2005="" and="" select="" prod_name="" from="" products="" where="" vend_id="1003;" prod_price="" not="" like="" vendors="" order="" by="" as="" vend_title="" item_price="" expanded_price="" orderitems="" order_num="20005;" vend_name_upcase="" left="" abc="" right="" length="" lower="" upper="" ltrim="" rtrim="" substring="" bc1="" concat="" abc123xyz="" orders="" between="" avg_price="" num_cust="" max_price="" items_ordered="" total_price="" distinct="" price_avg="" num_prods="" group="" having="" cust_id="">=2;

  使用ORDER BY 实现分组的排序

  SELECT order_num,SUM(quantity*item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price)>=50 ORDER BY ordertotal;

  子查询可以用来减少查询的语句条数

  例如:

  SELECT order_num FROM orderitems WHERE prod_id = 'TNT2'; //返回结果20005,20007

  SELECT cust_id FROM orders WHERE order_num IN(20005,20007)

  SELECT cust_id FROM orders WHERE order_num IN(SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');

  计算字段使用子查询:

  SELECT cust_name,cust_state,(SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name;

  联结:

  (主键与外键)

  分表是为了更好的存储与提升可伸缩性,但在使用select查询的时候就不得不采用联结的方法

  SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id'

  表别名能够在单挑SELECT语句中不止一次的引用相同的表

  SELECT prod_id,prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = 'DTNTR');

  自联结方式:

  SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR';

  外部联结

  联结包含在相关表中没有关联行的行,这种类型的联结成为外部联结

  SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;

  左向外联结和右向外联结

  左向外联结的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联结所匹配的行

  RIGHT JOIN 和RIGHT OUTER JOIN

  右向外联结是左向联结的反向联结,将返回右表的所有行

  FULL JOIN 或FULL OUTER JOIN

  完整外部联结返回左表和右表的所有行,当某行在另一个表中没有匹配行时,则另一个表的

  选择表列包含空值,如果表之间有匹配行,则整个结果集包含基表的数据值。

  带聚集函数的联结

  SELECT customers.cust_name,customers.cust_id,COUNT(orders.order_num) AS num_ord FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;

  此SELECT语句使用INNER JOIN将customers和orders表相互关联。GROUP BY子句按客户分组数据,因此函数调用COUNT(order.order_num)对每个客户的订单技术,将它作为num_ord返回。

  聚集函数也可以方便的与其他联结一起使用

  SELECT customer.cust_name,customer.cust_id,COUNT(order.oder_num) AS num_ord FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;

  组合查询:

  多个查询(多条SELECT语句),并将结果作为单个查询结果集返回

  组合查询的应用场景:

  在单个查询中从不同的表返回类似结构的数据

  对单个表执行多个查询,按单个查询返回数据

  如果使用WHERE:

  SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price<=5 OR vend_id IN(1001,1002);   使用UNION:   SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price <=5 UNION SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN(1001,1002);   UNION会自动去重,如果想要匹配所有行,可以使用UNION ALL   SELECT语句的输出用ORDER BY子句排序,在用UNION组合查询时,只能用一条ORDER BY子句。必须出现在最后一条SELECT语句之后。   SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price <=5 UNION SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN(1001,1002) ORDER BY vend_id,prod_price;   INSERT INFO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) VALUES('Pep E.LaPew','100 Main Street','Los Angeles','CA','90046','USA',NULL,NULL);   如果想插入多行   INSERT INFO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) VALUES(('Pep E.LaPew','100 Main Street','Los Angeles','CA','90046','USA',NULL,NULL)(...));   INSERT SELECT:   //将SELECT语句返回的结果插入到另一张表中,通常用于将一张表导入到另外一张表中   INSERT INFO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) SELECT cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email FROM custnew;   更新和删除数据:   更新某一行的数据:   UPDATE customers SET cust_mail = 'elmer@fudd.com' WHERE cust_id = 10005;   更新多行:   UPDATE customers SET cust_mail = 'elmer@fudd.com' ,cust_email = 'elmer@fudd.com' WHERE cust_id = 10005;   IGNORE关键字可以忽略更新过程中的错误   删除数据:   DELETE FROM customers WHERE cust_id = 10006;   1   创建表:   CREATE TABLE customers   (   cust_id int NOT NULL AUTO_INCREMENT,   cust_name char(50) NOT NULL,   cust_address char(50) NULL,   cust_city char(50) NULL,   cust_state char(5) NULL,   cust_zip char(10) NULL,   cust_country char(50) NULL,   cust_contact char(50) NULL,   cust_email char(255) NULL,   PRIMARY KEY(cust_id)   )ENGINE=InnoDB;   NULL值就是没有值或缺值。   更新表ALTER   ALTER TABLE vendors ADD vend_phone CHAR(20);   删除刚刚添加的列:   ALTER TABLE Vendors DROP COLUMN vend_phone;   删除表:   DROP TABLE customers;   重命名表:   RENAME TABLE customers2 TO customers;   视图:   视图是虚拟的表,只包含使用时动态检索数据的查询   使用视图:   使用视图的原因:   重用SQL语句;   简化复杂的SQL语句,在编写查询后,可以方便的重用它而不必知道它的基本查询细节   使用表的组成部分而不是整个表   保护数据,可以给用户授予表的特定部分的访问权限而不是整个表的访问权限   更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。   触发器:   触发器的主要作用是事件发生时某些语句自动执行   CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added';

关于数据库基础中的mysql语句有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。