<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Peter Takahashi</title>
    <description>The latest articles on Forem by Peter Takahashi (@petertaka).</description>
    <link>https://forem.com/petertaka</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F857923%2F6b88f62f-6e6f-4993-9e5d-cf498760eca7.jpg</url>
      <title>Forem: Peter Takahashi</title>
      <link>https://forem.com/petertaka</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/petertaka"/>
    <language>en</language>
    <item>
      <title>SQL Basics: An Introduction to Structured Query Language</title>
      <dc:creator>Peter Takahashi</dc:creator>
      <pubDate>Thu, 09 Mar 2023 11:18:26 +0000</pubDate>
      <link>https://forem.com/petertaka/sql-basics-an-introduction-to-structured-query-language-3m91</link>
      <guid>https://forem.com/petertaka/sql-basics-an-introduction-to-structured-query-language-3m91</guid>
      <description>&lt;h1&gt;
  
  
  SQL Basics: An Introduction to Structured Query Language
&lt;/h1&gt;

&lt;p&gt;Structured Query Language (SQL) is the most widely-used and popular tool for working with relational databases. Originally developed in the 1970s, SQL is now considered an essential skill for data analysts, database administrators, and other professionals who work with data. This article provides a brief introduction to SQL basics that will help you get started with this powerful tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SQL?
&lt;/h2&gt;

&lt;p&gt;As mentioned above, SQL stands for Structured Query Language. It is a domain-specific language used to manage, manipulate, and retrieve data from relational databases. A relational database stores data in tables, which can be related to each other through keys or foreign keys. SQL allows users to interact with these tables and their relationships, making it an incredibly valuable tool for managing large sets of data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who will need SQL?
&lt;/h2&gt;

&lt;p&gt;SQL (Structured Query Language) is widely used by software developers, analysts, data scientists, and database administrators. Anyone who needs to work with large or complex data sets, such as those in financial systems, customer relationship management tools, inventory management software, or data warehousing solutions, may need to use SQL to manage and analyze that data efficiently. Many companies today require expertise in SQL for positions dealing with data analysis or database management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Concepts in SQL
&lt;/h2&gt;

&lt;p&gt;Before we dive into how SQL works, it's important to understand some key concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Tables: A table is a collection of data organized into rows and columns.&lt;/li&gt;
&lt;li&gt;  Rows: Each row represents a single record in a table.&lt;/li&gt;
&lt;li&gt;  Columns: Each column represents a specific attribute of the records in the table.&lt;/li&gt;
&lt;li&gt;  Keys: A key is an attribute, or combination of attributes, that uniquely identifies a row in a table.&lt;/li&gt;
&lt;li&gt;  Foreign Keys: A foreign key is an attribute in one table that refers to the primary key of another table.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Basic SQL Commands
&lt;/h2&gt;

&lt;p&gt;Once you're familiar with the key concepts of SQL, you're ready to start writing SQL commands. Here are a few basic SQL commands to get you started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; SELECT: This command is used to extract data from a database. It retrieves one or more columns from a table based on some conditions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example: &lt;code&gt;SELECT column_name FROM table_name;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; INSERT: This command is used to insert new data into a database. It adds a new row to the table with the specified values.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example: &lt;code&gt;INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; UPDATE: This command is used to update the existing data in a database. It modifies the values of the selected rows in a table.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example: &lt;code&gt;UPDATE table_name SET column_name = new_value WHERE some_column = some_value;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; DELETE: This command is used to delete data from a database. It removes one or more rows from a table based on some conditions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example: &lt;code&gt;DELETE FROM table_name WHERE some_column = some_value;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; CREATE: This command is used to create a new table or a view in a database.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example: &lt;code&gt;CREATE TABLE table_name (column1 datatype(length), column2 datatype(length), column3 datatype(length));&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; DROP: This command is used to drop an existing table, view, database, or index.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example: &lt;code&gt;DROP TABLE table_name;&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Mysql development environment
&lt;/h1&gt;

&lt;h2&gt;
  
  
  for MacOS
&lt;/h2&gt;

&lt;p&gt;To build a MySQL development environment on macOS, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Install Homebrew: Homebrew is macOS's package manager that makes it easy to install and manage software packages on your system. To install Homebrew, open Terminal and run the following command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Install MySQL: Once you have installed Homebrew, you can use it to install MySQL. Run the following command in the Terminal:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Start MySQL: Once the installation is complete, start the MySQL server by running the following command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysql.server start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; Secure the Installation: It is recommended that you secure your MySQL installation. Run the following command in the Terminal to do that:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will be prompted with several questions about the security of your installation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Log into MySQL: To log in to MySQL, enter the following command in the Terminal:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will be prompted for your password. Once you enter the correct password, you will be logged in to MySQL and can begin working with databases and tables.&lt;/p&gt;

&lt;p&gt;Note: These are just basic steps to set up a MySQL development environment on MacOs. There may be additional steps depending on the specific requirements of your project or software.&lt;/p&gt;

&lt;h2&gt;
  
  
  for Windows OS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.mysql.com/doc/refman/8.0/en/windows-installation.html" rel="noopener noreferrer"&gt;https://dev.mysql.com/doc/refman/8.0/en/windows-installation.html&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;

&lt;h2&gt;
  
  
  CREATE TABLE
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Elementary level
&lt;/h3&gt;

&lt;p&gt;below is an example of how to create the "users" table with columns for "id", "name", "age", and "email".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we are creating a table called "users" with four columns. The "id" column is an integer that serves as the primary key for the table. The "name" column is a variable-length string that can store up to 50 characters. The "age" column is an integer that stores the age of the user. Finally, the "email" column is a variable-length string that can store up to 100 characters and represents the email address associated with the user.&lt;/p&gt;

&lt;h3&gt;
  
  
  intermediate level
&lt;/h3&gt;

&lt;p&gt;Example SQL command to create &lt;code&gt;users&lt;/code&gt; and &lt;code&gt;posts&lt;/code&gt; tables for a blog-like service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="k"&gt;FOREIGN&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This SQL code will create two tables, one called &lt;code&gt;users&lt;/code&gt; and another called &lt;code&gt;posts&lt;/code&gt;, along with the necessary columns for each table. The &lt;code&gt;users&lt;/code&gt; table includes columns for &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;username&lt;/code&gt;, &lt;code&gt;email&lt;/code&gt;, and &lt;code&gt;password&lt;/code&gt;, while the &lt;code&gt;posts&lt;/code&gt; table includes columns for &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;user_id&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;body&lt;/code&gt;, &lt;code&gt;created_at&lt;/code&gt;, and &lt;code&gt;updated_at&lt;/code&gt;. The &lt;code&gt;user_id&lt;/code&gt; field in the &lt;code&gt;posts&lt;/code&gt; table references the &lt;code&gt;id&lt;/code&gt; field in the &lt;code&gt;users&lt;/code&gt; table.&lt;/p&gt;

&lt;h2&gt;
  
  
  DROP TABLE
&lt;/h2&gt;

&lt;p&gt;Example of a SQL DROP TABLE implementation in the context of the "users" table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement would permanently delete the "users" table from your database, along with all data contained within it. It's important to use caution when implementing this command, as there is no way to retrieve the data once the table has been dropped. It's also a good practice to ensure that you have a backup of your data before performing any potentially destructive actions like dropping tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  SELECT
&lt;/h2&gt;

&lt;p&gt;You have a table named "users" with columns for "id", "name", "age", and "email". And we want to select all the records from the table where the age column is greater than or equal to 18. We can write the following SQL query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will return all records from the "users" table where the age is greater than or equal to 18. The &lt;code&gt;*&lt;/code&gt; symbol means we want to select all columns from the table. If we only wanted to select specific columns, we could replace &lt;code&gt;*&lt;/code&gt; with the names of the columns we want (e.g. &lt;code&gt;SELECT name, email FROM users WHERE age &amp;gt;= 18&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  SELECT INNER JOIN
&lt;/h2&gt;

&lt;p&gt;example of implementing an SQL SELECT INNER JOIN command to get users and posts at the same time when we have tables of users and posts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
    &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;INNER&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt;
    &lt;span class="n"&gt;posts&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt;
    &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query will return all users who have written one or more posts, along with the titles and content of those posts. If a user has not written any posts, they will not be included in the results.&lt;/p&gt;

&lt;h2&gt;
  
  
  LEFT JOIN
&lt;/h2&gt;

&lt;p&gt;Example of implementing a SQL SELECT LEFT JOIN command to get users and posts at the same time when there is a users and posts table:&lt;/p&gt;

&lt;p&gt;Suppose we have two tables named "users" and "posts". We want to retrieve all records from "users" table along with records from "posts" table where user_id matches. But also, if a user has no post we still want to return their information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
  &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; 
  &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;LEFT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; 
  &lt;span class="n"&gt;posts&lt;/span&gt; 
    &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this query, &lt;code&gt;LEFT JOIN&lt;/code&gt; will return all records from the &lt;code&gt;users&lt;/code&gt; table along with matching records from the &lt;code&gt;posts&lt;/code&gt; table based on the common column &lt;code&gt;user_id&lt;/code&gt;. If there are any users with no corresponding post, the result set will contain &lt;code&gt;NULL&lt;/code&gt; values for the post-related columns.&lt;/p&gt;

&lt;p&gt;Note: In &lt;code&gt;LEFT JOIN&lt;/code&gt;, the entire left-side table (&lt;code&gt;users&lt;/code&gt;) selected with the related rows matched from right-side table (&lt;code&gt;posts&lt;/code&gt;). If there are some unmatched records in right side then NULL value will be there in place of columns values from right side.&lt;/p&gt;

&lt;h2&gt;
  
  
  RIGHT JOIN
&lt;/h2&gt;

&lt;p&gt;Example of implementing a SQL SELECT RIGHT JOIN command to get users and posts at the same time when there is a users and posts table.&lt;/p&gt;

&lt;p&gt;Assume that we have two tables: &lt;code&gt;users&lt;/code&gt; and &lt;code&gt;posts&lt;/code&gt;. The &lt;code&gt;users&lt;/code&gt; table has columns for &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;username&lt;/code&gt;, &lt;code&gt;email&lt;/code&gt;, and &lt;code&gt;joined_at&lt;/code&gt;, while the &lt;code&gt;posts&lt;/code&gt; table has columns for &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;content&lt;/code&gt;, and &lt;code&gt;user_id&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If we want to retrieve all the rows from the &lt;code&gt;users&lt;/code&gt; table, as well as any corresponding rows from the &lt;code&gt;posts&lt;/code&gt; table which match on the &lt;code&gt;user_id&lt;/code&gt; column, we can use the following SQL query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;RIGHT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would return all rows from the &lt;code&gt;posts&lt;/code&gt; table, as well as any matching rows from the &lt;code&gt;users&lt;/code&gt; table, where the &lt;code&gt;user_id&lt;/code&gt; column in &lt;code&gt;posts&lt;/code&gt; matches the &lt;code&gt;id&lt;/code&gt; column in &lt;code&gt;users&lt;/code&gt;. If there are no matching rows in &lt;code&gt;users&lt;/code&gt; for a given row in &lt;code&gt;posts&lt;/code&gt;, the columns from &lt;code&gt;users&lt;/code&gt; will contain &lt;code&gt;NULL&lt;/code&gt; values.&lt;/p&gt;

&lt;h2&gt;
  
  
  INSERT INFO
&lt;/h2&gt;

&lt;p&gt;Example of SQL INSERT INTO statement to add a new row to the "users" table:&lt;/p&gt;

&lt;p&gt;To insert a single record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'John Smith'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'john@example.com'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: If you don't specify the id column, then depending on your database configuration, it may generate a new value automatically for the primary key column.&lt;/p&gt;

&lt;p&gt;To insert multiple records at once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; 
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Sarah Johnson'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'sarah@example.com'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Michael Brown'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'michael@example.com'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Lisa Davis'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'lisa@example.com'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will insert three new rows into the users table with the specified values.&lt;/p&gt;

&lt;h2&gt;
  
  
  UPDATE
&lt;/h2&gt;

&lt;p&gt;Example of SQL UPDATE implementation:&lt;/p&gt;

&lt;p&gt;Let's say we want to update the user's name stored in our "users" table for user with id 1. We can achieve that using the following SQL statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'John'&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will update the user's name to "John" where the id is equal to 1.&lt;/p&gt;

&lt;p&gt;Similarly, if we need to update multiple columns then we can use the following syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'John'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'john@example.com'&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will update the columns - "name", "age" and "email" for the user with id 1, as specified in the SET clause of the statement.&lt;/p&gt;

&lt;h2&gt;
  
  
  DELETE
&lt;/h2&gt;

&lt;p&gt;Example of an SQL DELETE implementation for the "users" table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query will delete a row from the "users" table where the "id" column has a value of 1. If you want to delete all rows from the "users" table, you can simply omit the WHERE clause:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's important to be careful when using the DELETE command as it permanently removes data from your table. Always make sure to backup your data and double-check your conditions before executing a DELETE statement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;SQL is an incredibly powerful tool for managing, manipulating, and retrieving data from relational databases. While this article has only scratched the surface of SQL basics, it should provide you with a good foundation to build upon. Whether you're a beginner or an experienced professional, learning SQL will make you more effective at working with data and analysis. Keep experimenting and practicing with SQL commands to improve your skills and become a master of this useful tool.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>sql</category>
      <category>mysql</category>
      <category>webdev</category>
    </item>
    <item>
      <title>We will OSS the Apple Music clone app</title>
      <dc:creator>Peter Takahashi</dc:creator>
      <pubDate>Tue, 26 Jul 2022 09:28:05 +0000</pubDate>
      <link>https://forem.com/petertaka/we-will-oss-the-apple-music-clone-app-3fek</link>
      <guid>https://forem.com/petertaka/we-will-oss-the-apple-music-clone-app-3fek</guid>
      <description>&lt;h1&gt;
  
  
  source code
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/outsource-systems/music-app-ios" rel="noopener noreferrer"&gt;https://github.com/outsource-systems/music-app-ios&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  demo video
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=_QdB1BJBHkg&amp;amp;feature=youtu.be" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=_QdB1BJBHkg&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why does it be OSS?
&lt;/h1&gt;

&lt;p&gt;From July to November 2021, we were developing a service that would allow artists to create their own music streaming apps.&lt;br&gt;
It doesn't look like it will work as a business and we are exiting the business, so we are making it OSS.&lt;/p&gt;

&lt;p&gt;Here is the LP. -&amp;gt; &lt;a href="https://origify.app/" rel="noopener noreferrer"&gt;https://origify.app/&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Did we start this service?
&lt;/h1&gt;

&lt;p&gt;An artist from the same junior high school who is active in his hometown of Yamanashi&lt;br&gt;
He said, "CDs don't sell. Streaming distribution rates are low." He was having problems such as&lt;br&gt;
I wanted to solve their problems, so I started to create this service.&lt;br&gt;
I wanted to solve those problems, so I started to create this service.&lt;/p&gt;

&lt;p&gt;The name of the service is Origify.&lt;br&gt;
If the business was going well, I was going to raise funds from VC and start the service.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why did you exit this business?
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Rights issues are difficult.&lt;/li&gt;
&lt;li&gt;It costs about 250 USD per artist initially just to put an app on the Apple Store and Google Play.&lt;/li&gt;
&lt;li&gt;Popular artists can make their own apps because they have the money to do so.&lt;/li&gt;
&lt;li&gt;Indie artists don't have money, so they can't afford the initial cost.&lt;/li&gt;
&lt;li&gt;Streaming apps that contain music from only one artist are difficult to retain users&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Artists who helped us.
&lt;/h1&gt;

&lt;p&gt;microM&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9zvb472m8g38p96gke8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9zvb472m8g38p96gke8.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Spotify: &lt;a href="https://open.spotify.com/artist/5ueB0CVSf1FYLCRCQeycLY" rel="noopener noreferrer"&gt;https://open.spotify.com/artist/5ueB0CVSf1FYLCRCQeycLY&lt;/a&gt;&lt;br&gt;
Youtube: &lt;a href="https://www.youtube.com/channel/UC78CiPV82R5N7mtJDJ7aQVA" rel="noopener noreferrer"&gt;https://www.youtube.com/channel/UC78CiPV82R5N7mtJDJ7aQVA&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  image
&lt;/h1&gt;

&lt;h2&gt;
  
  
  xcode
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60orv6c4sp6w347nmvvh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60orv6c4sp6w347nmvvh.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flcmmgxa4vr54uyi8gokn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flcmmgxa4vr54uyi8gokn.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frf05v776yksejnme8fwe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frf05v776yksejnme8fwe.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  application
&lt;/h2&gt;

&lt;h3&gt;
  
  
  home
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96kqtqnqnogdgg7our4v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96kqtqnqnogdgg7our4v.png" alt=" " width="800" height="1731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jrmtbu7auslmh3m0eu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jrmtbu7auslmh3m0eu3.png" alt=" " width="800" height="1731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  player
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9q0gw75dxl4wt13lo0l3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9q0gw75dxl4wt13lo0l3.png" alt=" " width="800" height="1731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiesgfuxz9j13q07hrbxv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiesgfuxz9j13q07hrbxv.png" alt=" " width="800" height="1731"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
    </item>
    <item>
      <title>We will OSS the Next.js + web3 starter kit</title>
      <dc:creator>Peter Takahashi</dc:creator>
      <pubDate>Thu, 05 May 2022 07:41:42 +0000</pubDate>
      <link>https://forem.com/petertaka/we-will-oss-the-nextjs-web3-starter-kit-oec</link>
      <guid>https://forem.com/petertaka/we-will-oss-the-nextjs-web3-starter-kit-oec</guid>
      <description>&lt;h1&gt;
  
  
  overview
&lt;/h1&gt;

&lt;p&gt;This source code can be used universally when creating web3 related services such as NFT Market and DeFi.&lt;/p&gt;

&lt;p&gt;We have packed Next.js + Web3 with the tools you need to get started on your project.&lt;/p&gt;

&lt;p&gt;We created Next.js + web3 starter kit because We want to contribute to the development of web3 in the world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4n5kgpc3wku4sincf2c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4n5kgpc3wku4sincf2c.jpg" alt=" " width="800" height="1321"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsldfa54rt0hti0ie89zk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsldfa54rt0hti0ie89zk.jpg" alt=" " width="800" height="1362"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3danyayvdkih43cc7j4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3danyayvdkih43cc7j4.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;h2&gt;
  
  
  source code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Foxlottery/nextjs-web3-starterkit" rel="noopener noreferrer"&gt;https://github.com/Foxlottery/nextjs-web3-starterkit&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  demo site
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nextjs-web3-starterkit.vercel.app" rel="noopener noreferrer"&gt;https://nextjs-web3-starterkit.vercel.app&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Configured Tools
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Sentry&lt;/li&gt;
&lt;li&gt;Jest test&lt;/li&gt;
&lt;li&gt;Tailwind.css&lt;/li&gt;
&lt;li&gt;Vscode initialization&lt;/li&gt;
&lt;li&gt;PR and Issue template&lt;/li&gt;
&lt;li&gt;Seo module&lt;/li&gt;
&lt;li&gt;Husky&lt;/li&gt;
&lt;li&gt;Lingui&lt;/li&gt;
&lt;li&gt;DeepL automatic translation&lt;/li&gt;
&lt;li&gt;Google Tag Manager&lt;/li&gt;
&lt;li&gt;Redux&lt;/li&gt;
&lt;li&gt;Eslint&lt;/li&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;Github workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Sentry
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;https://sentry.io/&lt;/a&gt;&lt;br&gt;
Application Monitoring and Error Tracking Software&lt;/p&gt;
&lt;h2&gt;
  
  
  Jest test
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://jestjs.io/ja/" rel="noopener noreferrer"&gt;https://jestjs.io/ja/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;javascript unit test tool&lt;/p&gt;
&lt;h2&gt;
  
  
  Tailwind.css
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;https://tailwindcss.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;css framework&lt;/p&gt;
&lt;h2&gt;
  
  
  Vscode initialization
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;https://code.visualstudio.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initial setup for vscode support&lt;/p&gt;
&lt;h2&gt;
  
  
  PR and Issue template
&lt;/h2&gt;

&lt;p&gt;github pr and issue template&lt;/p&gt;
&lt;h2&gt;
  
  
  Seo module
&lt;/h2&gt;

&lt;p&gt;Initial setup for SEO measures with Nextjs&lt;/p&gt;
&lt;h2&gt;
  
  
  Husky
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/husky" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/husky&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Automatically execute commands when committed.&lt;/p&gt;
&lt;h2&gt;
  
  
  Lingui
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://lingui.js.org/" rel="noopener noreferrer"&gt;https://lingui.js.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seamless internationalization in Javascript&lt;/p&gt;
&lt;h2&gt;
  
  
  DeepL automatic translation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.deepl.com/translator" rel="noopener noreferrer"&gt;https://www.deepl.com/translator&lt;/a&gt;&lt;br&gt;
Translate the json files generated by lingui with deepl.&lt;/p&gt;

&lt;p&gt;You can translate by executing this command.&lt;br&gt;
Please get the API KEY at the deepl website.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npx&lt;/span&gt; &lt;span class="nx"&gt;cross&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt; &lt;span class="nx"&gt;DEEPL_AUTH_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;XXXXX&lt;/span&gt; &lt;span class="nx"&gt;ts&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="nx"&gt;lingui&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;deepl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Google Tag Manager
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tagmanager.google.com/" rel="noopener noreferrer"&gt;https://tagmanager.google.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google Analytics lets you measure your advertising ROI as well as track your Flash, video, and social networking sites and applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redux
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://redux.js.org/" rel="noopener noreferrer"&gt;https://redux.js.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Predictable State Container for JS Apps&lt;/p&gt;

&lt;h2&gt;
  
  
  Eslint
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;https://eslint.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;code-checking tool&lt;/p&gt;

&lt;h2&gt;
  
  
  Prettier
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;https://prettier.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An opinionated code formatter&lt;/p&gt;

&lt;h2&gt;
  
  
  Github workflow
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions" rel="noopener noreferrer"&gt;https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CI/CD tool&lt;br&gt;
Github workflow deploys and runs tests when commits and merges are made&lt;/p&gt;

&lt;h2&gt;
  
  
  Commitlint
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://commitlint.js.org/#/" rel="noopener noreferrer"&gt;https://commitlint.js.org/#/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;commit linter&lt;/p&gt;

&lt;h1&gt;
  
  
  License
&lt;/h1&gt;

&lt;p&gt;MIT&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>web3</category>
      <category>nextjs</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
